Avi*_*pai 61 objective-c uitableview ios segue
我在表格视图中有一个效果列表.我创建了一个右上角的条形按钮,它可以将push segue推送到另一个视图控制器,这有助于创建一个新的效果.现在我想将push segues添加到表格视图单元格中,以便可以在添加效果视图控制器上加载效果值,我可以保存已编辑的值.
问题是我可以通过编程方式创建push segue吗?如果没有,我可以通过一个prepareforsegue
?如果我尝试使用一个prepareforsegue
,我遇到一个问题,控制拖动从UITableView
不让我创建推送segue到添加效果视图控制器.
med*_*eda 177
control 从View Controller拖动到View Controller
您需要为segue指定一个标识符:
执行segue:
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"yourSegue" sender:self];
}
Run Code Online (Sandbox Code Playgroud)
现在就是这个,如果您需要将一些数据传递给该视图控制器,这将只执行segue.然后你必须实现以下segue委托:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Make sure your segue name in storyboard is the same as this line
if ([[segue identifier] isEqualToString:@"yourSegue"])
{
//if you need to pass data to the next controller do it here
}
}
Run Code Online (Sandbox Code Playgroud)
Sur*_*gch 48
这个答案显示了如何传递数据,并针对Xcode 8和Swift 3进行了更新.
以下是如何设置项目.
TableView
.请看这里的简单示例.ViewController
.使用TableView的第一个视图控制器:
import UIKit
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
// ...
// method to run when table view cell is tapped
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// Segue to the second view controller
self.performSegue(withIdentifier: "yourSegue", sender: self)
}
// This function is called before the segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// get a reference to the second view controller
let secondViewController = segue.destination as! SecondViewController
// set a variable in the second view controller with the data to pass
secondViewController.receivedData = "hello"
}
}
Run Code Online (Sandbox Code Playgroud)
第二视图控制器
class SecondViewController: UIViewController {
@IBOutlet weak var label: UILabel!
// This variable will hold the data being passed from the First View Controller
var receivedData = ""
override func viewDidLoad() {
super.viewDidLoad()
print(receivedData)
}
}
Run Code Online (Sandbox Code Playgroud)
有关在View Controllers之间传递数据的更基本示例,请参阅此答案.
skw*_*hua 47
这是另一个选项,不需要使用didSelectRowAtIndexPath.
您只需将Interface Builder中的segue从原型单元连接到目标.
从那里你可以简单地:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "AffiliationDetail", let destination = segue.destinationViewController as? AffiliateDetailViewController {
if let cell = sender as? UITableViewCell, let indexPath = tableView.indexPathForCell(cell) {
var affiliation = affiliations[indexPath.row]
destination.affiliation = affiliation
}
}
}
Run Code Online (Sandbox Code Playgroud)
May*_*ain 13
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self performSegueWithIdentifier:@"YourPushSegueName" sender:self];
}
Run Code Online (Sandbox Code Playgroud)
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
MyViewController *myVController = (MyViewController *)[self.storyboard instantiateViewControllerWithIdentifier:@"StoryBordIdentifier"];
[self.navigationController pushViewController:myVController animated:YES];
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
93663 次 |
最近记录: |