简单的问题(是的吧!)。我想在我的UISplitViewController的详细页面上为我的iPad项目添加一个“NEXT”按钮。如果单击,它将是进入页面列表中下一页的另一种方式。作为奖励,我想突出显示根视图中与您登陆的新视图相对应的正确行。
任何关于去哪里的一般指导和建议都很棒!
更新:感谢Anna的建议,下面是我用来将所有这些结合在一起的代码。它工作得很好。谢谢安娜。
在详细信息页面上,我将其包括在内:
- (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.
}
答案 0 :(得分:0)
实现此目的的一种方法是使用NSNotificationCenter
。
viewDidLoad中的根视图控制器将调用addObserver:selector:name:object:
使自己成为名为@“NextPageRequested”的通知的观察者。
详细视图上的按钮在点击时会调用postNotificationName:object:
来请求根视图控制器转到下一页。
在根视图控制器中,通知处理程序方法会(假设根视图控制器是UITableView):
indexPathForSelectedRow
selectRowAtIndexPath:animated:scrollPosition:
以突出显示该行tableView:didSelectRowAtIndexPath:
)答案 1 :(得分:0)
为您的detailviewcontroller提供父导航控制器,并通过导航项将下一个按钮添加到导航栏。按Next将触发pushviewcontroller到nav-stack。
或者将顶部工具栏添加到当前视图控制器并将按钮放在那里。