iOS ViewController之間傳遞數據


翻譯自stackoverflow的問題

前向傳遞數據:

例如你有ViewControllerA和ViewControllerB,從ViewcontrollerA向ViewcontrollerB傳遞一個BOOL變量:

(1)在ViewControllerB.h創建一個屬性

@property (nonatomic, assign) BOOL *isSomethingEnabled;

(2)在ViewcontrollerA中引入頭文件

#import "ViewControllerB.h"

 當點擊didSelectRowAtIndex或者IBAction的時候可以用以下代碼設置ViewControllerB的屬性

ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];
viewControllerB.isSomethingEnabled = YES;
[self pushViewController:viewControllerB animated:YES];

用Segue前向傳遞數據:

用以下方法傳遞數據:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

(1)在ViewControllerB.h創建一個屬性

@property (nonatomic, assign) BOOL *isSomethingEnabled;

(2)在ViewcontrollerA中引入頭文件

#import "ViewControllerB.h"

(3)建立一個從ViewControllerA到ViewControllerB的segue,不妨取名為showDetailSegue

(4)實現方法:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"showDetailSegue"]){
        ViewControllerB *controller = (ViewControllerB *)segue.destinationViewController;
        controller.isSomethingEnabled = YES;
    }
}

如果你的view是嵌套在navigation controller里

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"showDetailSegue"]){
        UINavigationController *navController = (UINavigationController *)segue.destinationViewController;
        ViewControllerB *controller = (ViewControllerB *)navController.topViewController;
        controller.isSomethingEnabled = YES;
    }
}

后向傳遞數據:

ViewControllerA里面點擊某些按鈕,跳轉到ViewControllerB,里面的事件執行完成后,又要跳轉回ViewControllerA,並且把一些數據傳遞回ViewControllerA。這里需要用到代理模式。

(1)在ViewControllerB.h中,#import下,@interface上聲明一個協議

@protocol ViewControllerBDelegate <NSObject>
- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item;
@end

(2)在ViewControllerB.h設置一個delegate屬性

@property (nonatomic, weak) id <ViewControllerBDelegate> delegate;

(3)在ViewControllerB中,當我們退出這個ViewController的時候

NSString *itemToPassBack = @"Pass this value back to ViewControllerA";
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];

(4)在ViewControllerA.h中,引入頭文件並實現協議

#import "ViewControllerB.h"

@interface ViewControllerA : UIViewController <ViewControllerBDelegate>

(5)在ViewControllerA.m中,

- (void)addItemViewController:(ViewControllerB *)controller didFinishEnteringItem:(NSString *)item
{
    NSLog(@"This was returned from ViewControllerB %@",item);
}

(6)設置代理

ViewControllerB *viewControllerB = [[ViewControllerB alloc] initWithNib:@"ViewControllerB" bundle:nil];
viewControllerB.delegate = self
[[self navigationController] pushViewController:viewControllerB animated:YES];

 

 

 

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM