我正在使用 SWRevealViewController、ContentViewController 和 NavigationViewController(导航)的组合。
Storyboard如下:
在 TableViewCell 单击我可以获得导航文本。我希望能够做的是将这些信息传回自身。将 ContentViewController 的标题设置为选定的单元格并加载其他所需的数据。
我怎样才能实现这个功能?
这是我在 NavigationViewController.m 文件中的最新代码:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
BOOL isChild = currentExpandedIndex > -1 && indexPath.row > currentExpandedIndex && indexPath.row <= currentExpandedIndex + [[subItems objectAtIndex:currentExpandedIndex] count];
UITableViewCell *selectedCell = [self.tableView cellForRowAtIndexPath:indexPath];
if (isChild) {
NSString *cellText = selectedCell.detailTextLabel.text;
NSLog(@"%@ tapped",cellText);
return;
}
else{
NSString *cellText = selectedCell.textLabel.text;
NSLog(@"%@ tapped",cellText);
if([cellText isEqualToString:@"Sign Out"]){
[self performSegueWithIdentifier:@"goToHome" sender:self];
}
else if ([cellText isEqualToString:@"Sign In"]){
[self performSegueWithIdentifier:@"goToHome" sender:self];
}
else if ([cellText isEqualToString:@"Festival Map"]){
[self performSegueWithIdentifier:@"festivalMap" sender:self];
}
}
[self.tableView beginUpdates];
if (currentExpandedIndex == indexPath.row) {
[self collapseSubItemsAtIndex:currentExpandedIndex];
currentExpandedIndex = -1;
}
else {
BOOL shouldCollapse = currentExpandedIndex > -1;
if (shouldCollapse) {
[self collapseSubItemsAtIndex:currentExpandedIndex];
}
currentExpandedIndex = (shouldCollapse && indexPath.row > currentExpandedIndex) ? indexPath.row - [[subItems objectAtIndex:currentExpandedIndex] count] : indexPath.row;
[self expandItemAtIndex:currentExpandedIndex];
}
[self.tableView endUpdates];
}
- (void)expandItemAtIndex:(int)index {
NSMutableArray *indexPaths = [NSMutableArray new];
NSArray *currentSubItems = [subItems objectAtIndex:index];
int insertPos = index + 1;
for (int i = 0; i < [currentSubItems count]; i++) {
[indexPaths addObject:[NSIndexPath indexPathForRow:insertPos++ inSection:0]];
}
[self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
}
- (void)collapseSubItemsAtIndex:(int)index {
NSMutableArray *indexPaths = [NSMutableArray new];
for (int i = index + 1; i <= index + [[subItems objectAtIndex:index] count]; i++) {
[indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
}
[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
}
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"festivalMap"]){
NSLog(@"TEST");
NSString * title = @"CHANGE";
ViewController * view = [segue destinationViewController];
view.navigationItem.title = title;
}
}
这是我的 ContentViewController.m 文件的代码:
#import "ContentViewController.h"
#import "SWRevealViewController.h"
#import "Function.h"
@interface ContentViewController ()
@end
@implementation ContentViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
_barButton.target = self.revealViewController;
_barButton.action = @selector(revealToggle:);
[self.view addGestureRecognizer:self.revealViewController.panGestureRecognizer];
}
@end
谢谢
最佳答案
你可以试试这个:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:@"yoursegue"]){
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
UITableViewCell *selectedCell = [self.tableView cellForRowAtIndexPath:indexPath];
ContentViewController*contentView = (ContentViewController*)segue.destinationViewController;
contentView.cellText = selectedCell.textLabel.text;
NSLog(@"cellText = %@",selectedCell.textLabel.text;);
}
}
但是,从用户界面访问值或围绕它构建逻辑并不是一个好习惯,而应该使用数据源。这违反了 MVC 原则。