我有以下問題: 我創建了一個包含TabBar和三個ViewController的Storyboard的iOS 5 SDK應用程序。 從另一個類(Receiver.m)中,我想訪問例如ThirdViewController.m是TabBar的ViewController之一。iOS:從另一個類訪問故事板TabBar ViewController
在ThirdViewController.h我得到
@interface ThirdViewController : UIViewController {
}
@property (weak, nonatomic) IBOutlet UILabel *textlabel1;
@end
和ThirdViewController.h:
@implementation ThirdViewController
@synthesize textlabel1;
...
這似乎是確定的,因爲我可以從ThirdViewController實例中設置的標籤屬性。 現在從內部Receiver.m可以訪問我用:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]];
ThirdViewController *myVC = [storyboard instantiateViewControllerWithIdentifier:@"ThirdViewController"];
myVC.textlabel1.text = @"Hello";
這是行不通的。我不想創建ThirdViewController的新實例,但訪問現有的實例只更新UILabel。 Project Navigator中的我的故事板默認名爲MainStoryboard.storyboard。 我在這裏得到ThirdViewController類的實例做錯了嗎?
錯誤說:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Storyboard (<UIStoryboard: 0x190590>) doesn't contain a view controller with
identifier 'ThirdViewController''
謝謝!
好吧,這是我擔心的。那麼有沒有其他的方式(我發現像AppDelegate.window.ThirdViewController這不起作用),以某種方式獲得ThirdViewController實例通過ViewController'層次'?感謝您的建議,我知道這樣的事實,它不是好的風格,代碼會改變,但由於應用程序邏輯丟失,我試圖直接訪問ViewController。 – ZCDev 2012-02-04 09:30:01
你必須得到標籤欄控制器(應用程序委託的根視圖控制器。窗口),然後從標籤欄控制器的viewcontrollers數組中獲取第三個視圖控制器。 – jrturton 2012-02-04 09:54:07
'AppDelegate.window.UINavigationController.ThirdViewController'不會讓我那裏。有沒有人曾經這樣做,並願意分享一些代碼片段?我將不勝感激。否則,我將不得不改變一些代碼的結構。 – ZCDev 2012-02-05 18:08:41