2011-04-12 46 views
0

嘿開發人員! 我構建了一個表視圖,用數組對象填充它,並且當用戶在我的表視圖中單擊一個對象時執行了代碼,它加載了該對象自己的nib文件,並且使用了if語句。 (只是一點點,我用40個對象填充了我的Table View,因爲這是我需要的東西),所以我只會顯示前兩個if語句,因爲我有辦法在if語句代碼的開頭創建太多的如果我的表中查看所有40個對象的語句:幫助縮短我的代碼在didSelectRowAtIndexPath到一個更容易的代碼

if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Title"]) { 
    Title *titleLoad = [[Title alloc] initWithNibName:@"Title" bundle:nil]; 
    [self.navigationController pushViewController:titleLoad animated:YES]; 
    [titleLoad release]; 
    } 
    else if ([[glossaryArray objectAtIndex:indexPath.row] isEqual:@"Meta Description Tag"]) { 
     MetaDescriptionTag *metaDescriptionTagLoad = [[MetaDescriptionTag alloc] initWithNibName:@"MetaDescriptionTag" bundle:nil]; 
     [self.navigationController pushViewController:metaDescriptionTagLoad animated:YES]; 
     [metaDescriptionTagLoad release]; 
    } 
... 

原來是這樣,我也不想成爲自大展示我所有的if語句,所以是的此代碼的工作,每個數組對象加載它擁有單獨的nib文件(每個數組對象有40個nib文件1),並且每個nib文件都像Web視圖,圖像視圖,文本字段和其他對象。讓我覺得很瘋狂,但這是我現在能想到的唯一代碼,所以希望有人可以幫助我將代碼編輯成更簡單的代碼,謝謝

+0

數組和變量是你的朋友。你可以定義一個你的條目數組,和/或你可以定義一個UIViewController * var,這會消除ifs中2/3的代碼。 – jv42 2011-04-12 16:31:38

回答

2

如果您在glossaryArray中的值可以機械地轉換爲相應的類/筆尖的域名(例如,通過刪除所有空格),你可以做這樣的事情:

NSString *className = [self classNameFromString:[glossaryArray objectAtIndex:indexPath.row]]; 
UIViewController *viewController = [[NSClassFromString(className) alloc] initWithNibName:nil bundle:nil]; 
[self.navigationController pushViewController:viewController animated:YES]; 
[viewController release]; 

如果他們不能機械地轉換,你總是可以從一個構造一個NSDictionary映射到另一個,或專用情況少數不同。或重命名類和筆尖。

+0

謝謝!在分析你的代碼後立即開始工作! – PatrickGamboa 2011-04-12 17:00:33