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

当我们在一个控制视图上,在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;
    }

}
时间: 2024-08-24 09:38:42

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

代码设置UIButton文字、图片位置

假设有按钮rButton的 imageEdgeInsets和contentEdgeInsets可以设置按钮的标题和图片的位置,如下代码,设置标题居右 NSString * rBtnTitle = @"删除"; CGSize size = [rBtnTitle sizeWithAttributes:@{NSFontAttributeName:[UIFont systemFontOfSize:11]}]; NSLog(@"size = %@",NSStringFromC

用代码触发testng实现并发测试

有时候希望测试用例能用代码触发,发现testng支持这种操作,于是记录一下: 首先添加testng依赖: <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.9.10</version> </dependency> 然后实现要被调用的测试用例: /** * testng 注解实现并发测试 */

Firefox下代码触发a标签的click事件无效

通过一次导出功能是让自己如何一步一步掉坑最后又是怎么爬起来的 在页面中通过document.createElement('a');创建一个a标签,然后给a标签的href属性赋url,通过代码触发a标签的click事件请求后台,在Chrome浏览器中请求正常,但是在Firefox中始终无效,debugger发现代码也走到了a.click()方法,但是就是没反应.代码如下: $.ajax({ url: Config.ApiUrl + "TZTZ/DowloadFile", type: &q

unwind segue

1.modal segue返回时的segue,那么如何定义它呢,我们可以在返回到的controller中定义下面的一个函数: - (IBAction) funcName:(UIStoryboardSegue *)segue { //当modal segue返回时会自动调用此函数 } 2.如何指定unwind segue的触发控件呢?请看下图,右键松开后选择之前定义的funcName:函数即可指定完成. unwind segue,布布扣,bubuko.com

适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue

原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发者最糟糕的版本了.收到很多朋友表达同感. 之所以这么说,倒不是针对 iOS 8 本身的特性来说的,相反,iOS 8 开放的那些扩展机制以及各种 Kit 对开发者来说是非常好. 我抱怨的是 Apple 最近对软件质量的控制不太好,上次发一个让手机不工作的 iOS 8.0.1 就不说了,iOS 8 / Xcode 6 本身充满了非常多的 Bug.Xcode 作为

iOS9 Storyboard unwind segue反回传递事件时机详细步骤

当返回上一个界面且需要上一个界面做某事时,用unwind segue实现起来比delegate简单许多,甚至有时不适合用delegate来实现,那么我们就用unwind segue吧,而且像1->2->3这样的跳转,3视图可以通过unwind segue方便的返回到1.2任意界面.下面跟着我一起做吧. 一.创建如下视图 我的1.2.3界面分别对应ViewController1.ViewController2.ViewController3 二.下面演示怎么从2返回到1,从3返回到1 (1)打开

storyboard中Unwind segue使用

Unwind segue能被用作导航控制器中的回退,可以有push,modal,和popover三种效果.(效果和直接使用导航控制器的效果相同,不过更加强大). 假设情况A是导航控制器的根控制器,而跟控制器之下有另外的一个B控制器,B之下还有一个C控制器,层次还可以更加的深,从最深层次的控制器回到A 使用Unwind segue可以直接到达,并且只需要在A中创建一个方法类似下面的代码: ? 1 2 3 - (IBAction)unwindToThisViewController:(UIStory

【我们都爱Paul Hearty】斯坦福IOS8公开课个人笔记38 Unwind Segue反向过渡

之前我们接触过了segue,这是IOS中最基本的传递方式,今天来讲解一下如何进行反向的segue. 反向过渡的使用前提是发出过渡的MVC必须是由目标MVC直接或者间接正向过渡来的.反向过渡是唯一不会创造新的MVC的过渡方式,它有下面两个适用场景: 1很适合在navigationController的栈中使用进行跳转. 2关闭一个使用modal Segue生成的MVC. 和其他的segue不同,不需要拖拽连线,直接拖拽需要点击反向过渡的控件到场景顶部的小门形状的按钮,就可以在其中选择我们在目标MV

iOS开发使用Unwind Segue进行返回

我们在之前的一篇博客中谈到怎样使用dismissViewControllerAnimation()的方法在iOS中返回,如今我们有一个更为方便的方法来实现界面跳转之后的返回操作.使用的是Unwind Segue.详细实现过程例如以下: (1)分别在两个ViewController中创建一个button.一个作为跳转.一个作为返回,而且链接"跳转"button到第二个ViewController.总体界面布局例如以下: (2)在第一个ViewController中写一个@IBAction