美文网首页
iOS ViewController间传值

iOS ViewController间传值

作者: 不务正业Darwin | 来源:发表于2016-08-09 16:40 被阅读0次

delegate方式和block方式

解决方案一:delegate方式

从当前页面传值给上一个页面,使用delegate

回传值

第一个页面:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
//获取跳转的ViewController
    SecondViewController* vc = segue.destinationViewController;
    vc.delegate = self;
}

//实现协议方法
-(void)userDidEnterName:(NSString *)info{
    self.nameLabel.text = info;
}

第二个页面:
.h文件

@protocol DataEnterDelegate<NSObject>
-(void)userDidEnterName:(NSString* )info;
@end

@interface SecondViewController : UIViewController<UITextFieldDelegate>
@property (nonatomic) id <DataEnterDelegate> delegate;
@end

.m文件

//点击按钮返回前一个页面
- (IBAction)okBtPressed:(id)sender {
    [_delegate userDidEnterName:self.nameTxt.text];
    [self.navigationController popViewControllerAnimated:YES];
}

解决方案二:block方式

第一个页面:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    SecondViewController* vc = segue.destinationViewController;
 
//给后一个页面的成员变量block赋值   
    vc.returnValueBlock = ^(NSString* text){
        self.nameLabel.text = text;
    };
    
}

第二个页面:
.h文件

typedef void(^returnValueBlock)(NSString* text);
@interface SecondViewController : UIViewController<UITextFieldDelegate>
@property(nonatomic) returnValueBlock returnValueBlock;

-(void)returnValue:(returnValueBlock)block;
@end

.m文件

//set block
-(void)returnValue:(returnValueBlock)block{
    self.returnValueBlock = block;
}

- (IBAction)blockBtPressed:(id)sender {
    if (self.returnValueBlock != nil) {
        self.returnValueBlock(self.nameTxt.text);
    }
    [self.navigationController popViewControllerAnimated:YES];
}

iOS新手上路,多多指教……(_)

相关文章

网友评论

      本文标题:iOS ViewController间传值

      本文链接:https://www.haomeiwen.com/subject/ftjdsttx.html