Adding a NEXT button to an iPad UISplitViewControl

戏子无情 提交于 2019-12-12 06:37:44

问题


Simple question (yeah right!). I want to add a "NEXT" button on the detail pages of my UISplitViewController for my iPad project. If clicked, it would be another way of advancing to the next page in the list of pages. As a bonus, I want to highlight the correct row that in the root view that corresponds with the new view you land on.

Any general guidance and suggestions on where to go would be AWESOME!

UPDATE: Thanks to Anna's Suggestion below, here is the code I used to pull all this together. IT WORKS GREAT. Thanks Anna.

On the details page I included this:

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

}

On the RootViewController page I did:

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

And Finally later in the 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.

}

回答1:


One way to implement this is using NSNotificationCenter.

The root view controller, in viewDidLoad, would call addObserver:selector:name:object: to make itself an observer for a notification named, say, @"NextPageRequested".

The button(s) on the detail view(s), when tapped, would call postNotificationName:object: to request the root view controller to go to the next page.

In the root view controller, the notification handler method would (assuming the root view controller is a UITableView):

  • get the current index path using UITableView's indexPathForSelectedRow
  • calculate the next index path
  • call selectRowAtIndexPath:animated:scrollPosition: to highlight that row
  • call the code needed to actually change the page (possibly by calling tableView:didSelectRowAtIndexPath: directly)



回答2:


Give your detailviewcontroller a parent navigationcontroller and add your next button to the navbar via the navigation item. Pressing Next will trigger a pushviewcontroller to the nav-stack.

Or add a top-toolbar to your current view controller and put the button there.



来源:https://stackoverflow.com/questions/5797917/adding-a-next-button-to-an-ipad-uisplitviewcontrol

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