在“UITableView”中选择行时调用新视图 [英] Calling a New View when selecting a Row in a 'UITableView'

查看:77
本文介绍了在“UITableView”中选择行时调用新视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am currently writing my first iPhone app, but have encountered an issue. I have a view which contains a UITableView. This is the first time that I have attempted this, and this is the behaviour that I am trying to achieve:

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

When the user selects one of the rows, I would like this to call a new view, taking the user to a different page displaying info in reference to what they have selected.

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

I have it currently, so when the user selects a row it displays a UIAlert in the same view, but this doesn;t suit my needs. I have set the UITableView up through interface builder, and inputted the following code into my .m file to set it up.

- (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,但是,我想删除它并让它调用我选择的新视图;

This creates a list of ten rows. The following codes gives me my UIAlert when tapped, however, I want to remove this and make it call a new view of my choice;

- (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'。

Can anyone help with this last piece of code? the view I want it to call is called 'ProteinView'.

推荐答案

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

Alrighty, what we need to do is use one of the UITableView methods that are already readily available to us. We'll do the following.

- (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;
}

我还没编译过这个,所以我不知道是不是'我会全力以赴。但这绝对是最快,最简单的方法!

I haven't compiled this, so I don't know if it'll fully work. But that is definitely the fastest and most easiest way to do it!

这篇关于在“UITableView”中选择行时调用新视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆