سؤال

لقد قمت بإعداد طاولة مجمعة على تطبيقي ، والدفع إلى طرق عرض جديدة يعمل بشكل جيد. باستثناء شيء واحد. العناوين وتخطيط المكدس كلها غريبة. هذا هو الانهيار:

  1. لدي قسمين في طاولتي.
  2. عندما أنقر على الصف الأول في القسم الأول ، يأخذني إلى العرض الصحيح ، ولكن عنوان العرض الجديد هو اسم الصف الأول في القسم الثاني من الجدول.
  3. بدوره ، فإن الصف الثاني في عنوان القسم الأول هو الصف الثاني في لقب القسم الثاني.

إذا قمت بالنقر فوق الصف الثاني في القسم الثاني من جدول عرض الجذر ، فإن زر التنقل ينتقل إلى الصف الثاني في أول قسم الجدول.

إذن هذا مخطط لطاولتي:


الجدول القسم 1
الصف 1
الصف 2
الصف 3

القسم 2
الصف أ
الصف ب
الصف ج


لذا ، إذا قمت بالنقر فوق الصف 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;
}

أي مساعدة ستكون كثيرا محل تقدير.
جاك

هل كانت مفيدة؟

المحلول

أعتقد أنك تفتقد عبارة if لتحديد القسم الذي تم استغلاله من قبل المستخدم. تذكر أن NsindexPath لديه كل من صف خاص وقسم. عادة ما أفعل شيئًا كهذا:

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

أفترض أنك تستخدم طاولة مجمعة.

هتاف ، ديان

نصائح أخرى

دان على حق ، تحتاج إلى استخدام متغير القسم. يبدو أن الكود الخاص بك الآن ، فأنت في الواقع تدفع 2 وحدة تحكم عرض نظرًا لأن لديك سلسلة من الفرد إذا كانت البيانات ، بعد النقر فوق "الصف 1" يحدث ما يلي:

isequal:@"css" سيعود صحيح ،

ادفع وحدة التحكم في عرض CSS ،

ثم أسقط واستمر في التحقق (إذا .. isequal:@"html") .. (إذا .. isequal:@"javaScript")

ثم بالتأكيد بما فيه الكفاية (إذا .. isequal:@"php") سيعود أيضًا صحيحًا ودفع وحدة تحكم عرض PHP.

أنا لست على دراية بتطبيقك بالكامل ، لكن ملاحظة واحدة لاحظتها هنا (إلى جانب تسرب الذاكرة) هل لديك وحدة تحكم/NIB واحدة مخصصة لكل لغة .. إذا كان لدى وحدات التحكم في العرض سلوكيات/مظاهر مختلفة تمامًا ، فأعتقد أن هذا هو ما أنت يجب أن تفعل ذلك ، لكنني أوصي بمحاولة معرفة أوجه التشابه بين كل واحدة ومعرفة ما إذا كنت لا تستطيع صنع "LanguageViewController" واحد ، تمر بلغة من المفترض أن تمثلها وتفعل تهيئة/تعيين خصائص وحدة التحكم في العرض بناء على ذلك. قد لا ينطبق هذا ولكن إذا فعل ذلك سيوفر لك الكثير من العمل!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top