Как я могу перейти к другому контроллеру представления, когда пользователь нажимает на строку? - PullRequest
2 голосов
/ 24 февраля 2011

Я новичок в разработке для iPhone и хочу перейти на другую страницу, когда пользователь нажимает на определенную строку.Поэтому, если они нажимают на первую строку, я хочу, чтобы страница перенаправлялась на первый контроллер представления и так далее.Каждая строка имеет свой собственный контроллер вида.

Ответы [ 8 ]

3 голосов
/ 24 февраля 2011

Прежде всего вам не нужно устанавливать разные контроллеры представления для каждой строки (если у вас нет веских причин для этого).

правильный способ - установить 1 контроллер представления, который будет соответствоватьвсе ячейки в сырье и измените их данные в соответствии с выбранной строкой.

так, как вы делаете это:

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

Удачи

2 голосов
/ 24 февраля 2011

@ kashyap в didSelectRowAtIndexPath делегате UITableView вы должны проверить условия, при которых 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`

Надеюсь, вы меня поняли ..... Удачи!

0 голосов
/ 29 ноября 2016
 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
}

сделать это в didSelectRowAtIndexPath в tableView.

0 голосов
/ 24 февраля 2011

Это было то, с чем я столкнулся при первом запуске. Вот мой код, который я использую для этого. В 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];
0 голосов
/ 24 февраля 2011

Звучит так, как будто вы используете UINavigationController - это то, что вам нужно.

Затем вы помещаете свое «первое представление» в стек контроллера навигации из представления таблицы, например, из вашего делегата UITableView:

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

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

    ...
}
0 голосов
/ 24 февраля 2011

Легко:

Создайте и нажмите контроллер вида в этой функции делегата:

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

}
0 голосов
/ 24 февраля 2011
    - (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;
}
}

РЕДАКТИРОВАТЬ: Не понял, что вы пытаетесь. Как сказал Шани, вы не должны создавать viewcontroller для каждой строки, если в этом нет необходимости. Попробуйте изменить источник данных для каждой строки, но с использованием одного и того же viewcontroller. Так что забудьте эту реализацию.

0 голосов
/ 24 февраля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...