在“UITableView”中选择行时调用新视图

时间:2011-04-20 00:30:11

标签: iphone objective-c xcode ios uitableview

我目前正在编写我的第一个iPhone应用程序,但遇到了一个问题。我有一个包含UITableView的视图。这是我第一次尝试这个,这是我想要实现的行为:

当用户选择其中一行时,我希望这会调用一个新视图,将用户带到另一个页面,显示参考他们所选内容的信息。

我目前拥有它,因此当用户选择一行时,它会在同一视图中显示UIAlert,但这并不符合我的需要。我已通过界面构建​​器设置了UITableView,并将以下代码输入到我的.m文件中进行设置。

- (NSInteger)tableView:(UITableView *)tableView 
 numberOfRowsInSection:(NSInteger)section {
    //return the value
    return 10;
}

//now we define the cells.
- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    // Identifier for retrieving reusable cells.
    static NSString *cellIdentifier = @"MyCellIdentifier";

    // Attempt to request the reusable cell.
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    // No cell available - create one
    if(cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
                                      reuseIdentifier:cellIdentifier];
    }

    // Set the text of the cell to the row index.
    cell.textLabel.text = [NSString stringWithFormat:@"iPad %d", indexPath.row];

    return cell;
}

这将创建一个包含十行的列表。以下代码在点击时为我提供了我的UIAlert,但是,我想删除它并将其调用为我选择的新视图;

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    // Show an alert with the index selected.
    UIAlertView *alert = [[UIAlertView alloc] 
                          initWithTitle:@"iPad Selected"                         
                          message:[NSString stringWithFormat:@"iPad %d", indexPath.row]                     
                          delegate:self       
                          cancelButtonTitle:@"OK"           
                          otherButtonTitles:nil];
    [alert show];
    [alert release];   

}

任何人都可以帮助完成最后一段代码吗?我希望它调用的视图叫做'ProteinView'。

3 个答案:

答案 0 :(得分:3)

好的,我们需要做的是使用我们已经可以使用的UITableView方法之一。我们将执行以下操作。

- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

ProteinView *detailViewController = [[ProteinView alloc] initWithNibName:@"ProteinView" bundle:nil];

        // It is here we'd pass information from the currently selected UITableViewCell to the ProteinView.
        // An example of this is the following.

        // I would do it like this, but others would differ slightly.
        NSString *titleString = [[[NSString alloc] initWithFormat:@"iPad %d",indexPath.row] autorelease];

        // title is an object of detailViewController (ProteinView). In my own instances, I have always made a NSString which in viewDiDLoad is made the self.navigationBar.title string. Look below for what my ProteinView.m and .h would look like.
        detailViewController.stringTitle = titleString;
        // ...
        // Pass the selected object to the new view controller.
        [self.navigationController pushViewController:detailViewController animated:YES];
        [detailViewController release];
}

修改

// -------- ProteinView.m -------- //

- (void)viewDidLoad {

[super viewDidLoad];
// Do any additional setup after loading the view from its nib.

// Here we set the navigationItem.title to the stringTitle. stringTitle is declared in the .h. Think of it as a global scope variable. It is also propertised in the .h and then synthesized in the .m of ProteinView. 
self.navigationItem.title = stringTitle;
}

我没有编译这个,所以我不知道它是否完全有用。但这绝对是最快,最简单的方法!

答案 1 :(得分:1)

您可以像这样以模态方式呈现视图

YourViewController2 *viewController2 = [[YourViewController2 alloc]initWithNibName:@"YourViewController2" bundle:nil];
[self presentModalViewController:viewController2 animated:YES];

您是否有多个视图要呈现?如果是这样,您将需要创建一个包含名称的数组,将其传递到tableview中,然后根据indexPath.row显示所选行的正确视图。

答案 2 :(得分:0)

您必须打开MainWindow.xib并为其添加导航控制器。然后将导航控制器插座添加到您的应用代理并连接它们。然后,您需要将导航控制器的视图设置为主窗口的视图。

只需从File - >创建一个新的UITableViewController子类,就可以非常轻松地将表视图添加到任何iPhone应用程序中。新命令。

即使您走这条路线,我也建议您创建一个新的基于导航的项目,作为模板/备忘单。