How can I move to another view controller when the user clicks on a row?

一世执手 提交于 2019-12-29 09:11:11

问题


I am new to iPhone development, and I want to move to another page when the user clicks on a particular row. So, if they click on first row, I want the page to redirect to the first view controller, and so on. Each row has its own view controller.


回答1:


first of all you don't need to set different view controller for each row (unless you have a very good reason for doing that).

the correct way is to set 1 view controller that will fit all the cells in the raws and change its data according to the selected row.

the way you do that is:

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

i do recommend that you will start by using apple examples, they are great and there are a lot of them :

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

Good luck




回答2:


@kashyap in didSelectRowAtIndexPath delegate of the UITableView you have to check the conditions that on which indexPath you are clicking and open the viewControllers you had made accordingly

- (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`

Hope you get my point.....Good Luck!




回答3:


Dig into the docs:

http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/TableView_iPhone/ManageSelections/ManageSelections.html#//apple_ref/doc/uid/TP40007451-CH9-SW6




回答4:


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

EDIT: Didn't realize of what you're trying. As shani said, you should not create a viewcontroller for each row if there is no need to. Try changing the datasource for each row but using the same viewcontroller. So forget this implementation.




回答5:


Easy:

Create and push your view controller in this delegate function:

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

}



回答6:


It sounds like using a UINavigationController is what you want.

You then push your "first view" on to the navigation controller's stack from the table view, e.g., from you UITableView delegate:

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

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

    ...
}



回答7:


This was the one the things that I got problem when I first start. Here is my code that I use for this. In subviewcontroller I have my own constructor like

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

And in didSelectRowAtIndexPath Delegate method Of UITableView. I alloc it

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

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

[mylistview  release];



回答8:


 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
}

do this in didSelectRowAtIndexPath in tableView.



来源:https://stackoverflow.com/questions/5102122/how-can-i-move-to-another-view-controller-when-the-user-clicks-on-a-row

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!