iOS7中的prepareForSegue方法

时间:2014-03-06 17:19:03

标签: ios uitableview

我使用了故事板进行项目。问题是它无法推送到Function1DetailViewController.Moreover,因为tableview里面没有单元格,我不知道如何绘制segue以连接两个视图控制器。另外,我不知道如何编写prepareForSegue方法。

我是否还需要在didSelectRowAtIndexPath方法中进行一些更改?

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSString *tempSqlStatement = @"";
    NSString *tempString = @"%";
    databaseName = @"TCMdb8.sql";
    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains
    (NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
    if (buttonNum == 0) {
        Function1DetailViewController *function1DetailViewController = [[Function1DetailViewController alloc] initWithKey:[listOfItems objectAtIndex:indexPath.row] type:@"1"];
        [self.navigationController pushViewController:function1DetailViewController animated:YES];
    } else if (buttonNum != 0){
        if (buttonNum == 1) {
            tempSqlStatement = [NSString stringWithFormat:@"select name from Medicine where stroke ='%@' ORDER BY length(name) ASC", [listOfItems objectAtIndex:indexPath.row]];
        }
        function1SQLStatement = [tempSqlStatement UTF8String];
        [self checkAndCreateDatabase];
        [self readFromDatabase];
        [tableList reloadData];
        buttonNum = 0;
    }
}

3 个答案:

答案 0 :(得分:1)

您可以在故事板中的两个视图控制器之间绘制一个segue。选择整个视图控制器(最好单击状态栏的位置),按住Ctrl键拖动到另一个控制器。给新的segue一个标识符。

如果要在视图控制器中触发它:

[self performSegueWithIdentifier:@"TheIdentifierYouPutInIB"];

您可以使用上述方法替换didSelectRowAtIndexPath方法中的导航逻辑。 See here for prepare for segue example.

答案 1 :(得分:1)

以下是创建segue的不同方法:

1 - 从细胞到细节控制器:

From Cell To detail Controller


2 - 使用连接检查器

Using Connection Inspector


3 - 从View Controller到View Controller

Kill it with MOAR fire!


  • #1 #3 您需要先保留 control 拖动。
  • #2 & #3 : 你需要为你的segue提供一个标识符,不像#1 你必须使用代码执行segue:

添加标识符:

enter image description here

执行segue:

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

现在就是这样,如果您需要将一些数据传递给该视图控制器,这将只执行segue。然后你必须实现以下segue deleguate:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    // Make sure your segue name in storyboard is the same as this line
    if ([[segue identifier] isEqualToString:@"Function1Segue"])
    {
       NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
        // Get reference to Function1DetailViewController
       Function1DetailViewController *functionVC =
                (Function1DetailViewController *)segue.destinationViewController;
       functionVC.item = [listOfItems objectAtIndex:indexPath.row] type:@"1"];
    }
}

functionVC.item因为您要在Function1DetailViewController中设置名为item的属性。

答案 2 :(得分:0)

选择视图控制器图标(源视图控制器下方的黄色)并将其拖动到目标视图控制器。你可以通过程序调用它。