iOS开发之点击tableViewCell,显示详情
Posted 大侠去哪儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发之点击tableViewCell,显示详情相关的知识,希望对你有一定的参考价值。
如题。视图控制器A显示视频列表;视图控制器B显示视频详情,现希望将两个视图关联起来,点击A中某个视频跳转到B。
作为ios小菜鸟我首先搜索了一下关键词 “tableviewcell 跳转”,然而搜索结果多为object-C、xib、.m文件相关的文档,已看晕,最后在stackoverflow上找到一篇看得懂的问答。题主在Storyboard上将UITableViewCell与视图控制器B关联起来,但是并不知道如何关联数据。
题目下方有网友表示:“实现prepareForSegue方法就好啦!”
那么prepareForSegue究竟属于哪个protocol或class,如何在类中实现prepareForSegue方法,segue的生命周期又是怎样的呢?经过查阅文档得出如下结论:
1. 定义:Segue表示storyboard文件中两个ViewController之间的转换(?)。通常由A视图控制器的按钮、表格行或手势指向B视图控制器。
2. 触发:由UIKit实现,可使用notifications在A、B间传输数据。segue被触发后工作流程如下,提供shouldPerformSegueWithIdentifier:sender:方法中止跳转所需的步骤,如不新建segue和B;提供prepareForSegue:sender:方法传输数据。
3. 类型:show是把B堆在A上,detail用B替换A,Modally用模版显示B,Popover用B作弹窗。
Segue type |
Behavior |
---|---|
Show (Push) |
This segue displays the new content using the UIKit uses the |
Show Detail (Replace) |
This segue displays the new content using the UIKit uses the |
Present Modally |
This segue displays the view controller modally using the specified presentation and transition styles. The view controller that defines the appropriate presentation context handles the actual presentation. |
Present as Popover |
In a horizontally regular environment, the view controller appears in a popover. In a horizontally compact environment, the view controller is displayed using a full-screen modal presentation. |
那么接下来该行动啦!
1. 选中cell,关联cell与B,segue类型选择selection show (detail)
2. 在A对应的Controller中覆盖prepareForSegue方法,把数据传给B
class AController: UIViewController, UITableViewDataSource,UITableViewDelegate {
// ...
// 目前只有一个segue,所以没有判断viewControllerId,产生错误再学怎么区分
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let index : Int = (self.table.indexPathForSelectedRow?.row)!
let data:VideoSummary = videoSummaries[index]
let view : BController = segue.destinationViewController as! VideoViewController
view.selectedVideo = data
}
}
3. 在B对应的Controller中添加selectedVideo属性
class BController: UIViewController , UITableViewDataSource,UITableViewDelegate {
var selectedVideo : VideoSummary! // 注意感叹号
//...
}
4. 在B对应的Controller中设置视频详情
class BController: UIViewController , UITableViewDataSource,UITableViewDelegate {
//...
override func viewDidLoad() {
if(selectedVideo.title.containsString("...")){
//...
}
//...
}
// 成功。
以上是关于iOS开发之点击tableViewCell,显示详情的主要内容,如果未能解决你的问题,请参考以下文章
IOS开发系列--TableView多个TableViewCell自定义CellCell上画画(故事板+代码方式),ios7tableview索引