详细视图控制器的 UITableViewCell 标题和副标题(segue 帮助)

TableViewCell title and subtitle to detail view controller (segue help)

我的 tableview segue 和 detail view controller 有问题。我设法用 nsdictionary 的标题和副标题填充我的 table 视图。但是我无法将我的标题和副标题推送到详细视图。我需要将我的标题放在导航栏上,将副标题放在详细视图中的标签上。这是我的 table 视图和详细视图的代码和屏幕截图:

#import "TableViewController.h"
#import "DetailViewController.h"

@interface TableViewController (){

    NSDictionary *sarkilar;
    NSArray *sarkilarSectionTitles;
    NSArray *sarkilarIndexTitles;

}

@end

@implementation TableViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil];
    [[self navigationItem] setBackBarButtonItem:newButton];

    sarkilar = @{
                 @"A" : @[@{@"title":@"Alayına İsyan",@"subtitle":@"Seslendiren: Mustafa Sandal"},
                        @{@"title":@"Ardindan",@"subtitle":@"Seslendiren: Sinasi Gurel"}],
                 @"B" : @[@{@"title":@"Birak Gitsin",@"subtitle":@"Seslendiren: Tarkan"},
                        @{@"title":@"Buralar",@"subtitle":@"Seslendiren: Duman"}],
                 @"C" : @[@{@"title":@"Cephaneler",@"subtitle":@"Seslendiren: Burak Kut"},
                          @{@"title":@"Cari Acik",@"subtitle":@"Seslendiren: Kristal"}],
                 };


    sarkilarSectionTitles = [[sarkilar allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
    sarkilarIndexTitles = @[@"A", @"B", @"C",@"Ç", @"D", @"E", @"F", @"G", @"H", @"I",@"İ", @"J", @"K", @"L", @"M", @"N", @"O", @"Ö", @"P", @"R", @"S",@"Ş", @"T", @"U",@"Ü", @"V", @"Y", @"Z"];



}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return [sarkilarSectionTitles count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    NSString *sectionTitle = [sarkilarSectionTitles objectAtIndex:section];
    NSArray *sectionSarkilar = [sarkilar objectForKey:sectionTitle];
    return [sectionSarkilar count];
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    return [sarkilarSectionTitles objectAtIndex:section];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    NSString *sectionTitle = [sarkilarSectionTitles objectAtIndex:indexPath.section];
    NSArray *sectionSarkilar = [sarkilar objectForKey:sectionTitle];
    NSDictionary *dict = [sectionSarkilar objectAtIndex:indexPath.row];
    NSString *title = [dict objectForKey:@"title"];
    NSString *subtitle = [dict objectForKey:@"subtitle"];
    cell.textLabel.text = title;
    cell.detailTextLabel.text = subtitle;

}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
    //  return animalSectionTitles;
    return sarkilarIndexTitles;
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
    return [sarkilarSectionTitles indexOfObject:title];
}
//-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
//    
//    if ([[segue identifier] isEqualToString:@"ShowDetails"]) {
//        DetailViewController *detailView = [segue destinationViewController];
//        
//        NSIndexPath *myindexpath = [self.tableView indexPathForSelectedRow];
//        
//        int row = [myindexpath row];
//        detailView.DetailModal = @[_title[row], subtitle[row],];
//    }
//    
//    
//    
//}
//
@end

如您所见,我不知道如何设置我的 segue。这是屏幕截图。我希望询问如何设置 segue 不会太过分

您可以获取当前选中的单元格并在prepareForSegue:方法中传递值。

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
     UIViewController *destinationViewController = segue.destinationViewController;

     UITableViewCell *selectedCell = [self.tableView cellForRowAtIndexPath:self.tableView.indexPathForSelectedRow];

     destinationViewController.title = selectedCell.textLabel.text;
     //Add code to set label to selectedCell.detailTextLabel.text
}

明确地说,您需要在选择单元格时实现委托方法,然后调用您的 segue。 (假设这是您的应用程序的运行方式)

//TableViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [self performSegueWithIdentifier:@"ShowDetails" sender:self]; 
}

然后在转换之前调用 prepareForSegue 方法,您可以在其中设置 DetailViewController 上的任何属性。

//TableViewController.m
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if ([[segue identifier] isEqualToString:@"ShowDetails"]) {
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        DetailViewController *detailVC = segue.destinationViewController;
        UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

        detailVC.myTitle = cell.textLabel.text;
        detailVC.mySubtitle = cell.detailTextLabel.text;
    }
}

将这些属性添加到您的 DetailViewController header 文件以传递对您的标题和副标题的引用。

//DetailViewController.h
@property (nonatomic, strong) NSString *myTitle;
@property (nonatomic, strong) NSString *mySubtitle;

然后在 DetailViewController 的 viewDidLoad 方法中设置导航标题和标签属性

//DetailViewController.m
- (void)viewDidLoad {
    [super viewDidLoad];

    self.navigationItem.title = self.myTitle;
    self.myLabelName.text = self.mySubtitle;
}