iPhone: группированные таблицы и проблемы навигационного контроллера

StackOverflow https://stackoverflow.com/questions/2783614

Вопрос

Я настроил сгруппированную таблицу в моем приложении, и нажав на новые взгляды, работает нормально. Кроме одного. Названия и макет стека являются странными. Вот поломка:

  1. У меня есть две разделы в моем столе.
  2. Когда я нажимаю на первый ряд в первом разделе, он отвечает меня на правильный вид, но заголовок нового представления - это имя первой строки во втором разделе таблицы.
  3. В свою очередь, второй ряд в заголовке первого сечения - вторая строка во втором названии секции.

Если я нажимаю на вторую строку во втором разделе таблицы корневой точки зрения, кнопка навигации переходит ко второму ряду в первый Раздел таблицы.

Так вот схема моего стола:


Таблица Раздел 1.
Ряд 1.
Ряд 2
Ряд 3

Таблица Раздел 2.
Ряд а.
Ряд b
Row C.


Поэтому, если я нажимаю на ряд 3, заголовок нажатой точки - это строка C. Кнопка навигации позволяет вернуться к строке 3, а затем в конечном итоге заканчивается на корневом представлении.

Вот мой файл реализации, нажав вид:

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

    //CSS
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"CSS"])
    {
        CSSViewController *css = [[CSSViewController alloc] initWithNibName:@"CSSViewController" bundle:nil];
        [css setTitle:@"CSS"];
        [self.navigationController pushViewController:css animated:YES];
    }

    //HTML
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"HTML"])
    {
        HTMLViewController *html = [[HTMLViewController alloc] initWithNibName:@"HTMLViewController" bundle:nil];
        [html setTitle:@"HTML"];
        [self.navigationController pushViewController:html animated:YES];
    }

    //JS
    if ([[arryClientSide objectAtIndex:indexPath.row] isEqual:@"JavaScript"])
    {
        JSViewController *js = [[JSViewController alloc] initWithNibName:@"JSViewController" bundle:nil];
        [js setTitle:@"JavaScript"];
        [self.navigationController pushViewController:js animated:YES];
    }

    //PHP
    if ([[arryServerSide objectAtIndex:indexPath.row] isEqual:@"PHP"])
    {
        PHPViewController *php = [[PHPViewController alloc] initWithNibName:@"PHPViewController" bundle:nil];
        [php setTitle:@"PHP"];
        [self.navigationController pushViewController:php animated:YES];
    }

    //SQL
    if ([[arryServerSide objectAtIndex:indexPath.row] isEqual:@"SQL"])
    {
        SQLViewController *sql = [[SQLViewController alloc] initWithNibName:@"SQLViewController" bundle:nil];
        [sql setTitle:@"SQL"];
        [self.navigationController pushViewController:sql animated:YES];
    }

& Массив, подающий данные таблицы:

- (void)viewDidLoad {
    [super viewDidLoad];


    arryClientSide = [[NSArray alloc] initWithObjects:@"CSS",@"HTML",@"JavaScript",nil];
    arryServerSide = [[NSArray alloc] initWithObjects:@"Objective-C", @"PHP",@"SQL",nil];
    // arryResources = [[NSArray alloc] initWithObjects:@"HTML Colour Codes", @"Useful Resources", @"About",nil];
    self.title = @"Select a Language";
    [super viewDidLoad];

    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
}

Любая помощь будет значительно Ценится.
разъем

Это было полезно?

Решение

Я думаю, что вы пропустите заявление, если определить, какой раздел пользователь включен. Помните, что nsindexpath имеет как строку, так и свойство раздела. Я обычно делаю что-то вроде этого:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ( indexPath.section == 0 ) {
  // Do something with arryClientSide
}
if ( indexPath.section == 1 ) {
  // Do something with arryServerSide
}

Я предполагаю, что вы используете сгруппированную таблицу.

Ура, -дан

Другие советы

Дан правильно, вам нужно использовать переменную IddePPath.section. Похоже, что ваш код сейчас, вы на самом деле нажимаете 2 контроллеров просмотра, поскольку у вас есть серия индивидуальных лиц, если вы нажмете «строку 1», происходит следующее:

ISEQUAL: @ «CSS» вернется правдой,

Нажмите контроллер представления CSS,

Затем выпадайте и продолжайте проверять (если .. @ @ "html") .. (если .. lequal: @ "JavaScript")

Тогда конечно, достаточно (если .. неравному: @ "php") также вернется и True и нажимает контроллер PHP View.

Я не знаю о всей вашей приложении, но одно замечание, которое я заметил здесь (помимо утечек памяти), у вас есть один контроллер / Nib, посвященный каждому языку .. Если контроллеры представления значительно разные поведения / появления Нужно делать, но я бы порекомендовал попробовать посмотреть, какое сходство между каждым и посмотрим, если вы не можете сделать один «LinkeViewController», пропустите, на каком языке его предполагается представлять и выполнять инициализацию / установить свойства контроллера просмотра. на основании этого. Это может не подать заявку, но если оно это сэкономит вам много работы!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top