2016-12-06 59 views
-1

我有一個類ErrorMessageViewController:如何正確設置實例化視圖控制器的控件的值?

// ErrorMessageViewController.h 
@interface ErrorMessageViewController: UIViewController 
@property (nonatomic, strong) IBOutlet UILabel* messageTitle; 
@property (nonatomic, strong) IBOutlet UILabel* messageContent; 
@end 

// ErrorMessageViewController.m 
@implementation ErrorMessage 
@synthesize messageTitle, messageContent; 
@end 

我實例化這個觀點是這樣的控制器:

UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
ErrorMessageViewController * errorMessage = (ErrorMessageViewController *) [storyboard instantiateViewControllerWithIdentifier:@"ErrorMessage"]; 
[[errorMessage messageTitle] setText:@"Error"]; 
[[errorMessage messageContent] setText:@"Duplicate ID"]; 
[[self navigationController] pushViewController:errorMessage animated:YES]; 

但出現視圖控制器的messageTitle和在messageContent的UILabel是空的。我仔細檢查並確保UILabel s連接到故事板的UILabel s。

這是怎麼發生的?如何從instantiateViewControllerWithIdentifier:正確初始化對象的控件?

回答

2
// ErrorMessageViewController.h 
@interface ErrorMessageViewController: UIViewController 
@property (nonatomic, strong) IBOutlet UILabel* messageTitle; 
@property (nonatomic, strong) IBOutlet UILabel* messageContent; 

@property (nonatomic, strong) NSString *title; 
@property (nonatomic, strong) NSString *msg; 

@end 


UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
ErrorMessageViewController * errorMessage = (ErrorMessageViewController *) [storyboard instantiateViewControllerWithIdentifier:@"ErrorMessage"]; 
errorMessage.title = @"Error"; 
errorMessage.msg = @"Duplicate ID"; 

[[self navigationController] pushViewController:errorMessage animated:YES]; 

在你的 'viewDidLoad中'

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    messageTitle.text = title; 
    messageContent.text = msg; 
} 
+0

嘿,這工作!謝謝!我可以問爲什麼這個工作,而不是直接將值設置爲控件? –

+0

由於初始化時尚未創建。無論您將其設置爲強大,您的插座仍然無效。它就像viewController的視圖還沒有創建,所以viewDidLoad它的工作原理,因爲在這部分loadView()已經被調用,你的插座被創建。 – nferocious76

+0

同意,並改變網點爲弱。 – danh

相關問題