2013-05-03 42 views
2

我有兩個視圖控制器。 MainViewController推送SignUp ViewController。一旦SignUp View Controller關閉,我需要訪問MainViewController的同一個實例來更新UIButton.title。iOS:訪問調用Segue的同一個UIViewController實例

.H的MainView

//MainViewController.h 
#import <UIKit/UIKit.h> 


@interface MainViewController : UITableViewController 
-(void)loggedIn; 

@end 

的.m

@interface MainViewController() 

@end  

-(void)loggedIn 
{ 
    NSLog (@"This is Logged in inside MainView.m"); 
    self.logInOutButton.title = @"Logout"; 
} 

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    UIViewController *destinationViewController = segue.destinationViewController; 
    Signup *signUp = [destinationViewController isKindOfClass:[SignUp class]] ? (Signup*)destinationViewController : nil; 
    signUp.mainViewController = self; 
    NSLog(@"Preapre For Segue %@", self); 
} 

.H註冊

#import <UIKit/UIKit.h> 
#import "MainViewController.h" 
@interface SignUp : UIViewController 
@property (strong, nonatomic) MainViewController *mainViewController; 
@end 

的.m

@synthesize mainViewController; 

- (void) loggedIn 
{ 
    NSLog(@" MainViewController %@", mainViewController); 
    [mainViewController loggedIn]; 
    self.presentingViewController dismissViewControllerAnimated:YES completion:nil]; 
} 

當我做的NSLog我得到不同的值:

Preapre For Seg <STMainViewController: 0x9f7d600> 
MainViewController (null) 
+1

您是否嘗試過記錄的註冊視圖控制器是你分配mainViewController後?看起來有可能是兩者之間的中間控制器,最有可能是一個導航控制器... – 2013-05-03 13:25:14

+1

在設置'mainViewController'屬性之前檢查'signUp'是否爲'nil'。 – 2013-05-03 13:42:29

+1

請參閱http://stackoverflow.com/a/9736559/1271826 – Rob 2013-05-03 13:49:07

回答

1

創建一個協議/委託。關於如何實現這一點,有許多資源。總之,您使用您希望在源代碼上運行的方法在目標視圖控制器上創建協議,然後從源視圖控制器訂閱該代理。

Protocol Delegate

不要忘記從你的prepareForSegue方法設置委託

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    Signup *signUp = segue.destinationViewController; 
    signup.delegate = self; 
    NSLog(@"Preapre For Segue %@", self); 

}

相關問題