UITableView не отображает стиль ячейки 2 - PullRequest
0 голосов
/ 19 ноября 2011

Я пытаюсь отобразить переменную массива словарей в таблице Cell Style 2, которая используется приложением Contacts для отображения информации о контакте. По какой-то причине стиль ячейки не отображается.

Переменная массива "arrayOfDictionaries_E", которая имеет следующую настройку.

/// Dictionary 1
NSArray *dataArray = [NSArray arrayWithObjects: @"Host", hostname, nil];
NSArray *keysArray = [NSArray arrayWithObjects: @"Label", @"Data", nil];
NSDictionary *host_dict = [[NSDictionary alloc] initWithObjects: dataArray forKeys: keysArray]; 
/// Dictionary 2
NSArray *dataArray2 = [NSArray arrayWithObjects: @"IP", hostIP, nil];
NSArray *keysArray2 = [NSArray arrayWithObjects: @"Label", @"Data", nil];
NSDictionary *ip_dict = [[NSDictionary alloc] initWithObjects: dataArray2 forKeys: keysArray2]; 
// Storage into Array of Dictionaries
NSArray *dictionariesArray = [[NSArray alloc] initWithObjects: host_dict, ip_dict, nil];

Я проверил, что массив содержит 2 словаря и оба словаря заполнены.

Так что у меня проблемы с: Во-первых, я хочу, чтобы все ячейки использовали CellStyle2. Во-вторых, я хочу, чтобы каждый словарь создавался в новом разделе. (например, приложение «Контакты», выборочно связывать группы элементов вместе)

Итак, вот код в моем файле реализации. Это UIViewController, использующий 2 протокола UITableView.

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return [arrayOfDictionaries_E count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return 2;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier] autorelease];
    }
    NSDictionary * dict = [arrayOfDictionaries_E objectAtIndex:indexPath.row];

    cell.textLabel.text = [dict objectForKey:@"label"];
    cell.detailTextLabel.text = [dict objectForKey:@"Data"];

    return cell;
}

Найти скриншот текущей таблицы. Здесь .

На кончике я связал выход tableView с владельцем файла и сделал так же для делегата и источника. Я изменил стиль на сгруппированный. Однако, как видно на рисунке выше, когда я запускаю программу, ячейка не отображается в указанном правильном стиле, и я не знаю, как заставить каждую строку отображаться в отдельных разделах. -> Я думаю о переменной Array> Array> Dictionary, чтобы приступить к работе, однако я совершенно растерялся из-за того, как это можно реализовать.

Я все еще относительно новичок в Objective-c, поэтому вам, возможно, придется объяснить с помощью реальных реализаций кода, чтобы продемонстрировать, как я могу этого достичь.

Заранее спасибо, что нашли время ответить на этот вопрос.

1 Ответ

1 голос
/ 19 ноября 2011

Есть 2 проблемы, которые, я думаю, могут быть на вашем пути:

  • Вы используете @ "label" в качестве ключа при заполнении ячейки, но @ "Label" при заполнении словаря.Ключи чувствительны к регистру
  • Вы используете indexPath.row, это будет только 0 или 1, так как у вас есть 2 строки на раздел.Вы должны использовать indexPath.section, так как для каждой записи в вашем массиве есть один раздел.

Я не уверен, что вы ожидаете увидеть в строках один и два, хотя.

Хорошо, я еще раз посмотрел на ваш вопрос, и вы, кажется, делаете все немного сложнее, чем нужно.Похоже, у вас есть имя хоста и IP-адрес, который вы хотите отобразить в двух ячейках в разделе, с одинаковыми метками в каждой части раздела.

Почему бы просто не иметь единого массива словарей, содержащего имя и IP-адрес, затем в cellForRowAtIndexPath выбрать словарь на основе номера раздела, затем на основе номера строки отобразить соответствующий элемент из словаря ижестко закодировать метку в этот момент?

Между прочим, причина, по которой стиль вашей ячейки не отображается, заключается в том, что вы передаете ноль для метки из-за упомянутой выше проблемы, поэтому, похоже, она имеет только одну метку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...