0

Я установил сгруппированную таблицу в своем приложении, и нажатие на новые представления прекрасно работает. За исключением одного. Заголовки и макет стека все странные. С его помощью вы можете использовать поиск по карте. По всем вопросам, связанным с этим вопросом, мы указываем:iPhone: Сгруппированные таблицы и проблемы с контроллером навигации

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

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

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


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

Таблица Раздел 2
строка A
Ряд B
Ряд 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; 
} 

Любая помощь будет значительно оценили.
Jack

+2

Священные утечки памяти, Бэтмен! (Каждый раз, когда вы 'alloc/init' новый viewController, вы должны« выпустить »его после того, как вы его нажали) –

+0

@Dave +1 для * batman *! – bddckr

ответ

4

Я думаю, вам не хватает инструкции if, чтобы определить, в какой раздел пользователь постучал. Помните, что NSIndexPath имеет свойство row и section. Обычно я делаю что-то вроде этого:

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

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

Приветствия, -дан

+0

Удивительный, спасибо. –

0

Dan является правильным, вам нужно использовать переменную indexPath.section.Кажется, что ваш код сейчас, вы на самом деле нажимаете 2 контроллера вида, так как у вас есть ряд отдельных операторов if, после нажатия «Строка 1» происходит следующее:

isEqual: @ "CSS" вернет true ,

толчок контроллер вид CSS,

затем падение вниз и продолжайте проверять (если .. IsEqual: @ "HTML") .. (если .. IsEqual: @ "JavaScript")

затем достаточно (если .. isEqual: @ "PHP") также вернет true и выведет контроллер представления php.

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

+0

Что касается последнего, о котором вы говорили, мне нужен только один наконечник, который будет контролировать каждый язык? Я создал отдельные наконечники, когда Xcode создал их для меня, когда я создал viewcontroller. Затем я передаю контроллеру представления массив для создания следующей таблицы. Смогу ли я подавать данные каждого языка программирования из plist? И мог ли я затем создать контроллер навигации для управления каждым элементом plist? –

+0

Да, это звучит как ситуация, когда вы просто создаете «LanguageViewController» (и nib), создаете пользовательскую функцию инициализации с дополнительным языковым строковым аргументом, а затем в функции init выполняете что-то вроде (следующим образом, это, конечно же, код psuedo) : if (язык равно «CSS») загружает данные из CSS.plist; else if (язык равно «HTML») загружает данные из HTML.plist; и т. Д. всего лишь предложение, хотя в сомнениях делайте то, что имеет для вас наибольший смысл. – Tom

+0

Правильно, поэтому я просто изменил бы все initWithNibName на свой код на новый язык LanguageViewController nib? –

 Смежные вопросы

  • Нет связанных вопросов^_^