iOS: 通过Storyboard的Segue来代替presentViewController_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > iOS: 通过Storyboard的Segue来代替presentViewController

iOS: 通过Storyboard的Segue来代替presentViewController

 2013/12/20 3:09:13  _Mgen  博客园  我要评论(0)
  • 摘要:演示不使用UIViewController的presentViewController:animated:completion:和dismissViewControllerAnimated:completion:方法,直接使用Storyboard的Segue来完成如下程序:点击按钮后,present一个新的ViewController。并且当用户选择确定但是没有输入任何文字时,保持在当前ViewController内并提示用户。当用户输入了文字然后选择确定或者直接选择取消后
  • 标签:view iOS controller

演示不使用UIViewController的presentViewController:animated:completion:和dismissViewControllerAnimated:completion:方法,直接使用Storyboard的Segue来完成如下程序:

点击按钮后,present一个新的ViewController。并且当用户选择确定但是没有输入任何文字时,保持在当前ViewController内并提示用户。当用户输入了文字然后选择确定或者直接选择取消后,返回上一个ViewController,并处理数据。

屏幕快照 2013-12-19 下午5.44.31

 

首先,当然需要在Storyboard中创建3个ViewController,一个是主ViewController(类型就是ViewController),第二个是Navigation Controller,第三个是将会被present的ViewController,取名PresentedViewController。如下图:

屏幕快照 2013-12-19 下午5.49.34

 

接着将第一个ViewController中的触发按钮Segue到第二个Navigation Controller中。然后把第三个PresentedViewController中的界面设计好,并设置好Autolayout。

注意把ViewController按钮到Navigation Controller中Segue的Style设置为modal:

image

 

接着把UITextField连接到PresentedViewController类型中,看PresentedViewController类型定义:

@interface PresentedViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *textField;

//判断是否是点击确定后返回的主ViewController

@property (nonatomic, assign) BOOL isSaved;

 

//确定按钮点击事件

- (IBAction)okClick:(id)sender;

 

@end

 

okClick是确定按钮点击的事件,他会判断UITextField中是否有文字,如果有的话,执行返回到上一个ViewController的Segue,代码如下:

- (void)okClick:(id)sender

{

    //判断文本是否为空

    if (!self.textField.text.length)

    {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"Are you kidding me???" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        [alert show];

    }

    else

    {

        _isSaved = YES;

        //手动执行backToMainSegue

        [self performSegueWithIdentifier:@"backToMain" sender:self];

    }

}

 

接着在Storyboard中通过Control+拖拽连接确定按钮和下面的ViewController图标,然后选择列表中的okClick事件方法,如下图:

image

 

同时,主ViewController需要定义一个接受用来返回到当前页面的Segue方法,这种方式也叫Unwind Segue,如下主ViewController类型定义:

@interface ViewController : UIViewController

//回到主ViewControllerUnwind Segue

- (IBAction)backToMain:(UIStoryboardSegue*)segue;

 

@end

 

其中backToMain实现方法会通过segue.sourceViewController返回执行这个Segue的ViewController也就是本例的PresentedViewController,接着通过判断PresentedViewController的isSaved属性来决定是取消还是确定所触发的Segue,如果是确定的话,再访问PresentedViewController中的UI数据。如下代码:

- (void)backToMain:(UIStoryboardSegue*)segue

{

    //通过segue.sourceViewController返回执行这个SegueViewController也就是本例的PresentedViewController

    PresentedViewController *presentated = segue.sourceViewController;

    //判断是否是通过确定按钮返回的

    if (presentated.isSaved)

    {

        //输出PresentedViewController中的UI数据

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:[NSString stringWithFormat:@"你输入的是:%@", presentated.textField.text] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        [alert show];

    }

    else //用户取消

    {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Title" message:@"取消了" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        [alert show];

    }

}

 

接着需要把取消按钮连接到Storyboard下方Exit图标内的主ViewController中的backToMain方法,如下图:

image

 

最后还有一步,上面代码中,当用户选择确定且UITextField中有内容后,会手动执行返回到主ViewController中的Segue,这个Segue的名称是backToMain,但是我们还没有对这个Segue进行命名,所以需要切换至Xcode左侧Storyboard设计面板中的对象列表,选中这个Segue(名称是Unwind segue from 取消 to Exit),如下图:

屏幕快照 2013-12-19 下午6.00.07

 

在右侧Attributes inspector中设置Identifier也就是名称为我们需要的名称:backToMain。

屏幕快照 2013-12-19 下午6.00.14

 

源代码下载
下载页面
注意:链接是微软SkyDrive页面,下载时请用浏览器直接下载,用某些下载工具可能无法下载
源代码环境:Xcode 5.0

上一篇: IOS开发---菜鸟学习之路--(八)-实现新闻页面 下一篇: 没有下一篇了!
发表评论
用户名: 匿名