Добавление кнопки NEXT на iPad UISplitViewControl - PullRequest
0 голосов
/ 27 апреля 2011

Простой вопрос (да, верно!). Я хочу добавить кнопку «СЛЕДУЮЩИЙ» на страницах с подробностями моего UISplitViewController для моего проекта iPad. Если щелкнуть, это будет еще один способ перейти к следующей странице в списке страниц. В качестве бонуса я хочу выделить правильную строку, которая в корневом представлении соответствует новому представлению, в котором вы находитесь.

Любое общее руководство и предложения о том, куда идти, будет УДИВИТЕЛЬНЫМ!

ОБНОВЛЕНИЕ: благодаря предложению Анны ниже, вот код, который я использовал, чтобы собрать все это вместе. ОНО РАБОТАЕТ. Спасибо Анна.

На странице с подробностями я включил это:

- (IBAction)goToNext{
    NSLog(@"Going to Next from Welcome");
    [[NSNotificationCenter defaultCenter]
     postNotificationName:@"NextPageRequested" object:nil];

}

На странице RootViewController я сделал:

- (void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter]
     addObserver:self selector:@selector(moveOnToNextPage:)
     name:@"NextPageRequested" object:nil];
}

И, наконец, позже в RootViewController:

#pragma mark -
#pragma mark The NEXT Button
// This is the Code used for the Big NEXT button.  basically a Notification Center listener is set up in the view did load and when triggered by any of the buttons, this 
// function is called.  Here, I do 3 things:  1.  advance the highlighted cell of the master table view.  2.  call the didSelectRowAtIndexPath function of the table to 
// advance to the next page.  and 3.  Exchange the "dash" icon with the "check" icon.


-(void)moveOnToNextPage:(NSNotification*)notifications {
    NSIndexPath*    selection = [self.tableView indexPathForSelectedRow]; // grab the row path of the currently highlighted item



// Change the icon in the current row:

    NSString *checkImage = [[NSBundle mainBundle] pathForResource:@"checkGreen" ofType:@"png"];
    UIImage *checkMark = [[[UIImage alloc] initWithContentsOfFile:checkImage] autorelease]; // Grab the checkmark image.
    if (selection) {
        NSLog(@"not nil");
        UITableViewCell *cell1 = [self.tableView cellForRowAtIndexPath:[self.tableView indexPathForSelectedRow]];
        // cell1.accessoryType = UITableViewCellAccessoryCheckmark; // this is yet another way to add the checkmar, but for now, I will use Mine.
        cell1.imageView.image = checkMark; // now set the icon
    } else {
        NSLog(@"must be nil");
        NSUInteger indexArrBlank[] = {0,0}; // now throw this back into the integer set
        NSIndexPath *blankSet = [NSIndexPath indexPathWithIndexes:indexArrBlank length:2]; // create a new index path 
        UITableViewCell *cell0 = [self.tableView cellForRowAtIndexPath:blankSet];
        // cell1.accessoryType = UITableViewCellAccessoryCheckmark; // this is yet another way to add the checkmar, but for now, I will use Mine.
        cell0.imageView.image = checkMark; // now set the icon
    }



// Highlight the new Row
    int nextSelection = selection.row +1; // grab the int value of the row (cuz it actually has both the section and the row {section, row}) and add 1
    NSUInteger indexArr[] = {0,nextSelection}; // now throw this back into the integer set
    NSIndexPath *indexSet = [NSIndexPath indexPathWithIndexes:indexArr length:2]; // create a new index path 
    [self.tableView selectRowAtIndexPath:indexSet animated:YES scrollPosition:UITableViewScrollPositionTop]; // tell the table to highlight the new row

// Move to the new View
    UITableView *newTableView = self.tableView; // create a pointer to a new table View
    [self tableView:newTableView didSelectRowAtIndexPath:indexSet]; // call the didSelectRowAtIndexPath function
    //[newTableView autorelease];  //let the new tableView go.  ok.  this crashes it, so no releasing for now.

}

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Дайте вашему detailviewcontroller родительский навигационный контроллер и добавьте вашу следующую кнопку на панель навигации через элемент навигации. Нажатие «Далее» активирует pushview-контроллер в nav-стеке.

Или добавьте верхнюю панель инструментов к текущему контроллеру представления и поместите туда кнопку.

0 голосов
/ 27 апреля 2011

Одним из способов реализации этого является использование NSNotificationCenter.

. Контроллер корневого представления в viewDidLoad вызовет addObserver:selector:name:object:, чтобы сделать себя наблюдателем для уведомления с именем, скажем, @ "NextPageRequested".

Кнопка (и) в подробном представлении (ях), при нажатии которой будет вызываться postNotificationName:object:, чтобы запросить контроллер корневого представления перейти на следующую страницу.

В корневом представленииВ контроллере метод обработчика уведомлений (при условии, что контроллер корневого представления является UITableView):

  • получит текущий путь индекса, используя UITableView indexPathForSelectedRow
  • , вычислит следующий путь индекса
  • вызов selectRowAtIndexPath:animated:scrollPosition: для выделения этой строки
  • вызов кода, необходимого для фактического изменения страницы (возможно, путем непосредственного вызова tableView:didSelectRowAtIndexPath:)
...