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作弹窗。

Table 9-1Adaptive segue types

Segue type

Behavior

Show (Push)

This segue displays the new content using the showViewController:sender: method of the target view controller. For most view controllers, this segue presents the new content modally over the source view controller. Some view controllers specifically override the method and use it to implement different behaviors. For example, a navigation controller pushes the new view controller onto its navigation stack. 

UIKit uses the targetViewControllerForAction:sender:method to locate the source view controller.

Show Detail (Replace)

This segue displays the new content using the showDetailViewController:sender: method of the target view controller. This segue is relevant only for view controllers embedded inside a UISplitViewController object. With this segue, a split view controller replaces its second child view controller (the detail controller) with the new content. Most other view controllers present the new content modally.

UIKit uses the targetViewControllerForAction:sender:method to locate the source view controller.

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开发之 TableViewCell嵌套webview

iOS开发之根据按钮确定点击的section 和row

Uniapp最新版IOS打包详

iOS 之平移动画

IOS开发系列--TableView多个TableViewCell自定义CellCell上画画(故事板+代码方式),ios7tableview索引

李洪强iOS开发之-实现点击单行View显示和隐藏Cell