2011-12-12 5 views
1

안녕하세요 여러분, UIViewControllerUITableView이 있습니다. 테이블의 한 행을 탭하면 셀의 텍스트 값을 수집하여 localstringGValue이라는 문자열에 넣습니다.anotherviewcontroller에 값을 전달하는 방법은 무엇입니까?

나는, viewController을이 문자열을 전달하고 다른에 표시하기를 원하지만 -pushViewController를 사용하지 않고 :이 값은 내가이 저장된 값을 원하는 다른 뷰 컨트롤러의 viewWillapper에, 어딘가에 다음 NSUserDefaults 또는 NSDictonary과 같이 저장할 레이블에 표시됩니다. 내 .h에서

: 내 .m에서

NSString *localStringGValue; 

내 다른 뷰 컨트롤러에서

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    localStringGValue = [tableView cellForRowAtIndexPath:indexPath].textLabel.text; 
} 

: 사전에

-(void)viewWillAppear 
{ 
    label.text=localStringGValue; 
} 

감사합니다.

+0

위임 및 프로토콜의 간단한 경우 ... http://iphonedevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html 위임 변수에 대한 –

+0

검색 ... – Maulik

답변

2

:

[[NSUserDefaults standardUserDefaults] setObject:localstringGValue forKey:@"localstringGValue"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

는 nsuserdefaults에서 검색 :

NString *localstringGValue = [[NSUserDefaults standardUserDefaults] objectForKey:@"localstringGValue"]; 
+0

오, 내 하나님이 나를 위해 일하는, 대단히 감사합니다 – ICoder

+0

동적 값을 저장하기 위해 NSUserDefaults를 사용하는 것이 좋은 방법입니까? – Kjuly

+0

이 컨텍스트에서 "좋은"것을 어떻게 정의 하시겠습니까? 그것은 합리적인 느낌으로 사용할 때 한 가지 방법 일뿐입니다. 때로는 알림과 대리자를 대신 사용합니다. 그러나 대부분은 별개의 모델 클래스를 사용합니다. 가끔씩 데이터가 적고 간단한 옵션 인 nsuserdefaults로는 충분할 수 있습니다. 우리는 달리기 전에 모두 걸어 가야합니다. – ader

0

@property(nonatomic,retain)@synthesize을 신고 해주세요. 그러면 getters/setters가 자동으로 생성됩니다. 그렇지 않으면 직접 getter/setter를 정의하십시오.

+0

전 alerdy diclared,하지만 si는 이전에 페이지 리디렉션 코드에서 pas 값을 사용하지 않았다고 말했고, tableview 셀을 탭하면이 값을 레이블에 표시하고 싶습니다. – ICoder

1

그냥 delegate을 사용하십시오. 'UploadViewController'인스턴스를 푸시하기 전에 delegateself (GoogleDocMainPageController.m에)으로 설정해야합니다. 메인 코드는 다음과 같다

[self.delegate setDataAfterSelectedTabelCell:[NSString stringWithFormat:@"TalbeCell %d selected", [indexPath row]]]; 

: 매번 상기 tabel 셀이 선택되고, 그것은 GoogleDocMainPageController 의해 구현 self.delegate의 메소드를 디스패치하여 (여기서 GoogleDocMainPageController 인스턴스 임) self.delegate 대한 값을 설정하는 것
UploadViewController.h :

#import <UIKit/UIKit.h> 

@class UploadViewController; 

@protocol UploadViewControllerDelegate <NSObject> 

- (void)setDataAfterSelectedTabelCell:(NSString *)stringValueInCell; 

@end 

@interface UploadViewController : UITableViewController 

@property (nonatomic, retain) id <UploadViewControllerDelegate> delegate; 

@end 

UploadViewController.m :

//... 
@synthesize delegate = _delegate; 

//... 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self.delegate setDataAfterSelectedTabelCell:[NSString stringWithFormat:@"TalbeCell %d selected", [indexPath row]]]; 
} 

GoogleDocMainPageController.h :

#import <UIKit/UIKit.h> 

#import "UploadViewController.h" 

@class UploadViewController; 

@interface GoogleDocMainPageController : UIViewController <UploadViewControllerDelegate> 

- (void)loadUploadViewController; 

@property (nonatomic, retain) UILabel * glLabel; 
@property (nonatomic, retain) UploadViewController * uploadViewController; 

@end 

GoogleDocMainPageController.m : nsuserdefaults에 저장

//... 
@synthesize glLabel = _glLabel; 
@synthesize uploadViewController = _uploadViewController; 

//... 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    UIButton * uploadButton = [[UIButton alloc] initWithFrame:CGRectMake(10.0f, 160.0f, 300.0f, 35.0f)]; 
    [uploadButton setBackgroundColor:[UIColor blackColor]]; 
    [uploadButton setTitle:@"Upload Button" forState:UIControlStateNormal]; 
    [uploadButton addTarget:self action:@selector(loadUploadViewController) forControlEvents:UIControlEventTouchUpInside]; 
    [self.view addSubview:uploadButton]; 
    [uploadButton release]; 

    self.glLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 200.0f, 300.0f, 35.0f)]; 
    [self.glLabel setBackgroundColor:[UIColor blackColor]]; 
    [self.glLabel setTextColor:[UIColor whiteColor]]; 
    [self.glLabel setTextAlignment:UITextAlignmentCenter]; 
    [self.glLabel setText:@"Default"]; 
    [self.view addSubview:self.glLabel]; 

    self.uploadViewController = [[UploadViewController alloc] initWithStyle:UITableViewStylePlain]; 
} 

//... 
#pragma mark - 

- (void)loadUploadViewController 
{ 
    [self.uploadViewController setDelegate:self]; 
    [self.navigationController pushViewController:self.uploadViewController animated:YES]; 
} 

#pragma mark - UploadViewControllerDelegate 

- (void)setDataAfterSelectedTabelCell:(NSString *)stringValueInCell 
{ 
    [self.glLabel setText:stringValueInCell]; 
} 
+0

선생님,이 코드를 이해하지 못했습니다 : // Then 그냥 다른보기 컨트롤러를 표시하십시오. - (void) theMethodDispatchAnotherViewController { [self.navigationController pushViewController : self.yourAnotherViewController animated : YES]; }이 코드를 어디에 넣었습니까? – ICoder

+0

그래서 다른보기 컨트롤러의 viewwillappear에서 lbel.text = self.yourAnotherviewcontroller를 넣고 싶습니까? – ICoder

+0

@Coder 그냥 샘플 메소드이므로,'.m' 파일에 넣을 수 있습니다. 자, 잊어 버리십시오.'self.yourAnotherViewController'를 사용하여'다른 뷰 '를 표시해야 할 때 사용하십시오. – Kjuly

0

을 FOL을 통해 이동 lowing Steps-

최초의 ViewController에서

-

  1. SecondViewController 같은 제의 ViewController 초 * = [SecondViewController ALLOC] INIT]의 개체를 생성; 초myLable = @ "내 래벨 문자열";

    두 번째의 ViewController에서

    -

  2. .H 파일 UILable * myLable에서;

    @property (논리적이지 않은, 보유) IBOutlet UILable * myLable;

    2.in .m 파일 @ mythable myLable;

관련 문제