关于如何使用代码触发 UIButton的Unwind Segue

本文介绍了一种在iOS应用中通过键盘的返回键触发按钮事件,进而实现视图跳转的方法。通过定义自定义按钮事件处理函数和键盘返回事件处理函数,结合Storyboard中的UnwindSegue,实现了在输入文本后自动跳转到下一个视图。文章详细解释了如何在代码中判断是否执行UnwindSegue,以及如何确保在跳转前完成必要的数据准备。
摘要由CSDN通过智能技术生成

当我们在一个控制视图上,在UITextField输入文字信息之后,希望可以使用键盘的Done触发一个 Done的UIButton,但是刚开始我直接在

-(BOOL)textFieldShouldReturn:(UITextField *)textField 内调用按键的行为: - (IBAction)DonePhotoButton:(UIButton *)sender {

//代码 } 虽然可以执行到{}内的代码,但是不会触发按键按下之后一个Unwind Segue(解散当前视图,退回上一个视图,并完全一个方法),也就是说没有触发退回上一个视图然后再执行一个AddPhoto:方法,寻思着,为什么没有触发Unwind Segue,于是仔细查看最终找到了解决办法。

IPhone 上的视图:                        

               

 

 

在Storyboard里的unwind Segue:

         

 

我这里的代码是使用

[self performSegueWithIdentifier:kUNWIND_ID sender:nil];

强制执行一个带Identifier的Segue,并且判断是否符合要求,实验证明这是可行的

执行的代码:

- (IBAction)DonePhotoButton:(UIButton *)sender {
}//按键事件 

#pragma mark - prepareForSegue
//prepare
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if ([segue.identifier isEqualToString:kUNWIND_ID]) {
        NSManagedObjectContext * context = self.photographyerTakingPhoto.managedObjectContext;
        if (context) {
            Photo * photo = [NSEntityDescription insertNewObjectForEntityForName:@"Photo" inManagedObjectContext:context];
            photo.title     = self.TextFieldTitle.text;
            photo.subtitle  = self.TextFieldSubTitle.text;
            photo.whoTook   = self.photographyerTakingPhoto;
            photo.latitude  = [NSNumber numberWithDouble:self.location.coordinate.latitude];
            photo.longitude = [NSNumber numberWithDouble:self.location.coordinate.longitude];
            photo.imageURL  = [self.imageURL absoluteString];
            photo.thumbnailURL = [self.thumnailURL absoluteString];
            self.photo = photo;
        }
    }
}
//判断identifer 决定是否执行prepareForSegue 同时给出警告
-(BOOL) shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender{
    if ([identifier isEqualToString:kUNWIND_ID]) {
        if (!self.image) {
            [self alert:@"No Photo taken!"];
            return NO;
        }else if(![self.TextFieldTitle.text length] || ![self.TextFieldSubTitle.text length]){
            [self.TextFieldTitle.text length]       ? [self alert:@"SubTitle required!"]       :
            [self.TextFieldSubTitle.text length]    ?  [self alert:@"Title required!"]   : [self alert:@"Title and SubTitle required"] ;
            return NO;
        }else{
            return YES;
        }
    }else{
        return [super shouldPerformSegueWithIdentifier:identifier sender:sender];
    }
}

//----------------------------------------------------------------//
//点击键盘的return取消键盘
-(BOOL)textFieldShouldReturn:(UITextField *)textField{
    [textField resignFirstResponder];
    BOOL CanSegue = [self shouldPerform:kUNWIND_ID];
    if (CanSegue)
        [self performSegueWithIdentifier:kUNWIND_ID sender:nil];
    
    return YES;
}

-(BOOL) shouldPerform:(NSString *)identifier  {
    if ([identifier isEqualToString:kUNWIND_ID]) {
        if (!self.image) {
            [self alert:@"No Photo taken!"];
            return NO;
        }else if(![self.TextFieldTitle.text length] || ![self.TextFieldSubTitle.text length]){
            [self.TextFieldTitle.text length]       ? [self alert:@"SubTitle required!"]       :
            [self.TextFieldSubTitle.text length]    ?  [self alert:@"Title required!"]   : [self alert:@"Title and SubTitle required"] ;
            return NO;
        }else{
            return YES;
        }
    }else{
        return NO;
    }

}

 

转载于:https://www.cnblogs.com/zuopeng/p/4075474.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值