Как изменить текст в нескольких метках при нажатии на специальную ячейку табличного представления из раздела?

Итак, мне нужна помощь. Мой код делает почти то, что я хочу, но я думаю, что есть небольшая проблема. У меня есть представление таблицы, которое получает информацию из файла .plist, и мой код выводит ее в виде таблицы. Теперь, что я хочу, так это то, что когда я нажимаю ячейку представления таблицы, я хочу, чтобы четыре разные метки менялись на то, что я указал в коде. У меня это работает, но только в первом разделе (у меня есть разделы AB). Когда я нажал первую ячейку табличного представления во втором разделе, я получил те же значения для своих меток, что и первая ячейка в первых разделах. Любые идеи, как заставить это работать?

Это мой контроллер представления.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>

@property (copy, nonatomic) NSDictionary *firstTableView;
@property (copy, nonatomic) NSArray *firstTableViewKey;

@property (weak, nonatomic) IBOutlet UILabel *norskLabel;
@property (weak, nonatomic) IBOutlet UILabel *infinitivLabel;
@property (weak, nonatomic) IBOutlet UILabel *presensLabel;
@property (weak, nonatomic) IBOutlet UILabel *preteritumLabel;
@property (weak, nonatomic) IBOutlet UILabel *perfektumLabel;


@end

Вот мой viewcontroller.m:

#import "ViewController.h"


static NSString *SectionsTableIdentifier = @"SectionsTableIdentifier";

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    UITableView *tableView = (id)[self.view viewWithTag:1];
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:SectionsTableIdentifier];

    NSString *path = [[NSBundle mainBundle] pathForResource:@"SterkeVerb" ofType:@"plist"];

    self.firstTableView = [NSDictionary dictionaryWithContentsOfFile:path];

    self.firstTableViewKey = [[self.firstTableView allKeys] sortedArrayUsingSelector:@selector(compare:)];

    tableView.backgroundColor = [UIColor clearColor];
    tableView.opaque = NO;
    tableView.backgroundView = nil;


}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}
#pragma mark -
#pragma mark Table View Data Source Methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
return [self.firstTableViewKey count];

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSString *key = self.firstTableViewKey[section];
NSArray *nameSection = self.firstTableView[key];
return [nameSection count];

}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
    return self.firstTableViewKey[section];
}

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

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SectionsTableIdentifier];

    NSString *key = self.firstTableViewKey[indexPath.section];
    NSArray *nameSection = self.firstTableView[key];

    cell.textLabel.text = nameSection[indexPath.row];
    return cell;

}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {


    if (indexPath.row == 0){

        _norskLabel.text = @"å bake";
        _infinitivLabel.text = @"zu backen";
        _presensLabel.text = @"bäckt/backt";
        _preteritumLabel.text = @"backte";
        _perfektumLabel.text = @"hat gebacken";

}

    else if (indexPath.row == 1){

        _norskLabel.text = @"å motta";
        _infinitivLabel.text = @"zu empfangen";
        _presensLabel.text = @"empfängt";
        _preteritumLabel.text = @"empfing";
        _perfektumLabel.text = @"hat empfangen";
    }
}

У меня есть еще несколько вариантов, если их добавить в код, но это будет длинный список. Не могли бы вы показать мне, как поставить первое "если" в разделе "Б" и "иначе, если" в разделе "Е". А может как то еще что-то получить в другом разделе, было бы здорово!

Спасибо за любую помощь, которую я получаю!


person Henrik LP    schedule 16.04.2013    source источник
comment
используйте indexPath.section для различения разделов в табличном представлении.   -  person Balu    schedule 16.04.2013
comment
Да, вы не проверяли раздел, например indexPath.row. используйте indexPath.row вместе с indexPath.section, чтобы различать строки каждого раздела среди других.   -  person Harjot Singh    schedule 16.04.2013
comment
Как я могу добавить его вместе? Я просто пишу: else if (indexPath.section == 1, indexPath.row == 1)?   -  person Henrik LP    schedule 16.04.2013


Ответы (1)


Как я уже упоминал в комментарии, вот фрагмент кода, показывающий, как выполнить проверку раздела. По умолчанию это работает для раздела 0. Не для других разделов.

вот код:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

 if (indexPath.section == 0) {

    if (indexPath.row == 0 )
    {
        _norskLabel.text = @"å bake";
        _infinitivLabel.text = @"zu backen";
        _presensLabel.text = @"bäckt/backt";
        _preteritumLabel.text = @"backte";
        _perfektumLabel.text = @"hat gebacken";

    }

    else if (indexPath.row == 1){

        _norskLabel.text = @"å motta";
        _infinitivLabel.text = @"zu empfangen";
        _presensLabel.text = @"empfängt";
        _preteritumLabel.text = @"empfing";
        _perfektumLabel.text = @"hat empfangen";
    }

}

else if (indexPath.section == 1){

    if (indexPath.row == 0 ){

        _norskLabel.text = @"å bake";
        _infinitivLabel.text = @"zu backen";
        _presensLabel.text = @"bäckt/backt";
        _preteritumLabel.text = @"backte";
        _perfektumLabel.text = @"hat gebacken";

    }

    else if (indexPath.row == 1){

        _norskLabel.text = @"å motta";
        _infinitivLabel.text = @"zu empfangen";
        _presensLabel.text = @"empfängt";
        _preteritumLabel.text = @"empfing";
        _perfektumLabel.text = @"hat empfangen";
    }

}

}

Посмотрите на это и дайте нам знать, если у вас все еще есть какие-либо проблемы.

Спасибо :)

person Harjot Singh    schedule 16.04.2013