关于如何使用代码触发 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;
}
}
关于如何使用代码触发 UIButton的Unwind Segue的更多相关文章
- 数据逆向传递 unwind segue
一.简介 unwind segue通过允许你定义一个控制器和其他控制器的关系来扩展segue的概念,这个“关系”先于顺传(流式控制)的方式.基于unwind segue可以实现导航相反的效果,即将界面 ...
- 用代码触发testng实现并发测试
有时候希望测试用例能用代码触发,发现testng支持这种操作,于是记录一下: 首先添加testng依赖: <dependency> <groupId>org.testng< ...
- Jenkins教程(七)实现 GitLab 提交/合并代码触发构建
楔子 最近公司推行统一构建平台(基于 Jenkins + Kubernetes 插件创建 slave),原来部门自建的 Jenkins 不让用了. 迁移上统一构建平台的最大阻力是前端模块发布的问题: ...
- iOS9 Storyboard unwind segue反回传递事件时机详细步骤
当返回上一个界面且需要上一个界面做某事时,用unwind segue实现起来比delegate简单许多,甚至有时不适合用delegate来实现,那么我们就用unwind segue吧,而且像1-> ...
- 适配 iOS 8 时遇到的问题两则:远程推送和 Unwind Segue
原文:http://imtx.me/archives/1910.html 昨天我在微博上吐槽:iOS 8 / Xcode 6 真是史上对开发人员最糟糕的版本号了.收到非常多朋友表达同感. 之所以这么说 ...
- UnWind Segue
iOS 6 和 Xcode 4.5 中添加了一个新特性叫做“Unwind Segue”. 使用Unwind Segue,可以方便的在Navigation Controller的Controllers之 ...
- 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记38 Unwind Segue反向过渡
之前我们接触过了segue,这是IOS中最主要的传递方式,今天来解说一下怎样进行反向的segue. 反向过渡的使用前提是发出过渡的MVC必须是由目标MVC直接或者间接正向过渡来的.反向过渡是唯一不会创 ...
- iOS开发使用Unwind Segue进行返回
我们在之前的一篇博客中谈到怎样使用dismissViewControllerAnimation()的方法在iOS中返回,如今我们有一个更为方便的方法来实现界面跳转之后的返回操作.使用的是Unwind ...
- 跳出手掌心--如何立即触发UIButton边界事件
http://www.cocoachina.com/ios/20150611/12082.html 最近在使用UIButton的过程中遇到一个问题,我想要获得手指拖动button并离开button边界 ...
随机推荐
- 通过在Oracle子表外键上建立索引提高性能
根据我的经验,导致死锁的头号原因是外键未加索引(第二号原因是表上的位图索引遭到并发更新).在以下两种情况下,Oracle在修改父表后会对子表加一个全表锁: 1)如果更新了父表的主键(倘若遵循关系数据库 ...
- SqlServer——存储过程(未完工)
http://www.cnblogs.com/blsong/archive/2009/11/30/1613534.html http://blog.csdn.net/lenotang/article/ ...
- 部署和调优 2.9 mysql主从配置-3
测试 先给主mysql解锁 > unlock tables; 删除一个表 > use db1; > show tables; > drop table help_categor ...
- JDBC批处理数据
JDBC3.0 的增强支持BLOB,CLOB,ARRAY,REF数据类型.的ResultSet对象UPDATEBLOB(),updateCLOB(),updateArray()和updateRef( ...
- 我的第一个Socket程序-SuperSocket使用入门(二)
操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操操 辛辛苦苦写那么久的博客,最后手贱点了全屏富文本编辑器 ...
- elmah数据库sql脚本
/* 错误管理工具 SQL代码 */CREATE TABLE dbo.ELMAH_Error( ErrorId UNIQUEIDENTIFIER NOT NULL, Application NVARC ...
- python笔记--4--面向对象
面向对象 Python中对象的概念很广泛,Python中的一切内容都可以称为对象,除了数字.字符串.列表.元组.字典.集合.range对象.zip对象等等,函数也是对象,类也是对象. 在Python中 ...
- php中COM函数的使用
php里的com类可以操作window系统上的东西 例如:可以在本地打开一个word文档,然后写入东西,只用于window系统 需要加载php_com_dotnet.dll模块 $word = n ...
- Codeforces #495 Div2 problem E. Sonya and Ice Cream(1004E)
网上的大多是用树的直径做的,但是一些比较巧妙的做法,来自https://www.cnblogs.com/qldabiaoge/p/9315722.html. 首先用set数组维护每一个节点所连接的边的 ...
- Java C++ Socket通讯
import java.net.*; import javax.swing.plaf.SliderUI; /** * 与c语言通信(java做client,c/c++做server,传送一个结构) * ...