将下一个按钮添加到iPad UISplitViewControl [英] Adding a NEXT button to an iPad UISplitViewControl

查看:85
本文介绍了将下一个按钮添加到iPad UISplitViewControl的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

简单的问题(是的,对!).我想在我的iPad项目的UISplitViewController的详细信息页面上添加下一步"按钮.如果单击,将是进入页面列表中下一页的另一种方式.另外,我想在根视图中突出显示与您所登陆的新视图相对应的正确行.

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

}

在RootViewController页面上,我做了:

On the RootViewController page I did:

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

最后在RootViewController中:

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.

}

推荐答案

一种实现方法是使用NSNotificationCenter.

在viewDidLoad中的根视图控制器将调用addObserver:selector:name:object:以使其自己成为名为@"NextPageRequested"的通知的观察者.

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

点击详细视图上的按钮时,将调用postNotificationName:object:来请求根视图控制器进入下一页.

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.

在根视图控制器中,通知处理程序方法将(假设根视图控制器是UITableView):

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

  • 使用UITableView的indexPathForSelectedRow
  • 获取当前索引路径
  • 计算下一个索引路径
  • 调用selectRowAtIndexPath:animated:scrollPosition:以突出显示该行
  • 调用实际更改页面所需的代码(可能直接调用tableView:didSelectRowAtIndexPath:)
  • 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)

这篇关于将下一个按钮添加到iPad UISplitViewControl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆