当用户点击一行时,如何移动到另一个视图控制器?

时间:2011-02-24 08:28:13

标签: iphone cocoa-touch ios uitableview

我是iPhone开发的新手,我想在用户点击特定行时移动到另一个页面。因此,如果他们点击第一行,我希望页面重定向到第一个视图控制器,依此类推。每行都有自己的视图控制器。

9 个答案:

答案 0 :(得分:3)

首先,您不需要为每一行设置不同的视图控制器(除非您有充分的理由这样做)。

正确的方法是设置1个视图控制器,它将适合raws中的所有单元格,并根据所选行更改其数据。

你这样做的方式是:

in the - DidSelectRowAtIndexPath function in your implementation file you shuld:

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

//allocate your view controller
         DetailedViewController *detailedViewController = [[DetailedViewController alloc] init];

 //send properties to your view controller
         detailedViewController.property1 = someProperty1;
         detailedViewController.property2 = someProperty2;

 //push it to the navigationController
         [[self navigationController] pushViewController:detailedViewController animated:YES];
         [detailedViewController release];
    }

我建议您首先使用苹果示例,它们非常棒并且有很多:

http://developer.apple.com/library/ios/#samplecode/TableViewSuite/Introduction/Intro.html%23//apple_ref/doc/uid/DTS40007318

祝你好运

答案 1 :(得分:2)

didSelectRowAtIndexPath UITableView代表中的@kashyap您必须检查点击indexPath的条件并打开相应的viewControllers

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    // Navigation logic may go here -- for example, create and push another view controller.


     FirstViewController *firstViewController = [[FirstViewController alloc]        initWithNibName:@"FirstViewController" bundle:nil];
     SecondViewController *secondViewController = [[SecondViewController alloc]        initWithNibName:@"SecondViewController" bundle:nil];

     switch (indexPath.row) {
       case 0:
          [self.navigationController pushViewController:firstViewController animated:YES];
          [firstViewController release];
          break;
       case 1:
          [self.navigationController pushViewController:secondViewController animated:YES];
          [secondViewController release];
          break;
     }//Likewise do for the no of rows you have in your `UITableView`

希望你明白我的意思.....祝你好运!

答案 2 :(得分:0)

答案 3 :(得分:0)

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

          switch (indexPath.row) {
    case "X"
        // Allocate the viewController 
        [navigationcontroller.pushViewController:"yourviewcontroller" animated:YES];
        [release "yourviewcontroller"];
        break;

    default:
        break;
}
}
编辑:没有意识到你在尝试什么。正如shani所说,如果不需要,你不应该为每一行创建一个viewcontroller。尝试更改每行的数据源,但使用相同的viewcontroller。所以忘记这个实现。

答案 4 :(得分:0)

易:

在此委托函数中创建并推送视图控制器:

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

}

答案 5 :(得分:0)

听起来好像使用UINavigationController就是你想要的。

然后从表视图中将“第一个视图”推送到导航控制器的堆栈,例如,从您的UITableView委托:

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

    // indexPath.row == 0
    FirstViewController* firstVC = [[FirstViewController alloc] initWithNibName...];
    [self.navigationController firstVC animated:YES];
    [firstVC release];

    ...
}

答案 6 :(得分:0)

这是我第一次开始时遇到的问题。这是我用于此的代码。 在subviewcontroller中,我有自己的构造函数,如

-(id)initWithName:(NSString*)naMe
{
     name=naMe;
     return self;
}

didSelectRowAtIndexPath代理方法UITableView。我分配它

 MyListView mylistview=[[MyListView alloc] initWithName:@"name"];

[self.navigationController pushViewController:mylistview animated:YES];

[mylistview  release];

答案 7 :(得分:0)

 NSInteger row = indexPath.row;



UIViewController *newFrontController = nil;

 if (row == 0)
    {
        YourViewController *yourViewController = [[YourViewController alloc] initWithNibName:@"YourViewController" bundle:nil];
        newFrontController = [[UINavigationController alloc] initWithRootViewController:peopleViewController];
        [self.navigationController setNavigationBarHidden:YES];
    }  else if(row == 1){
//do your code
}

在tableView中的didSelectRowAtIndexPath中执行此操作。

答案 8 :(得分:0)

当用户点击行时,您可以移动到另一页,只需通过“ Control Drag”从单元格到ViewController进行segue并将segue类型设置为“ Push”即可。