2013-09-30 54 views
0

我已經編程了幾種其他語言,但這基本上是我的第一個iOS應用程序,我努力正確實現UITableView。 閱讀文檔後,完成此操作最常用的方法是創建一個UITableViewController的子類。我已經完成了這一步,並且已經實現了所有數據源協議方法以及代理協議中的行選擇方法,併爲其提供了三個屬性。如何從超視圖中刪除TableView時通知我?

第一種是行中的tableview數, 第二個是項目的陣列被顯示爲在表格視圖標籤, 終於有從保持標籤的文本的屬性選定的行。 一旦選擇了該行,我就設置了該標籤的屬性,然後從[self.view removeFromSuperView]中刪除表格。

以上不是我的應用程序中唯一的視圖。該應用程序是來自學校的顏色選擇器任務,因此主視圖包含操縱顯示顏色的所有控件。

子類化UITableViewController後我做了什麼,在我的主視圖控制器中創建了這個子類的一個實例,並將其作爲一個屬性。因此,在主視圖上是一個召回按鈕,允許用戶從以前保存的顏色列表中進行選擇。當單擊該按鈕是這個IBAction爲方法稱爲

-(IBAction)swithToSavedColorsView:(id)sender { 
self.savedColorTable.numberOfRows = self.dictionaryOfSavedColors.count; 
NSLog(@"Count in switch view is %d", self.dictionaryOfSavedColors.count); 
[ self.view addSubview:self.savedColorTable.view ]; 

}

這提供了可用保存的顏色列表,我行選擇響應與

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath: 
(NSIndexPath *)indexPath { 
self.textFromColorSelection = [ [ NSString alloc ] init ]; 
UITableViewCell *cell = [ tableView cellForRowAtIndexPath:indexPath ]; 
self.textFromColorSelection = cell.textLabel.text; 
NSLog(@"The value of selection is %@ ", self.textFromColorSelection); 
[ self.view removeFromSuperview ]; // Go back to main screen. 

}

當我寫這段代碼的時候,我得到了一個伊利的感覺,我從一開始就以完全錯誤的方式去創建UITableView。請讓我知道,如果我做了錯誤的事情,只要我在這些對象之間建立了溝通。

我實際上試圖解決的問題是在我打電話給 [ self.view removeFromSuperView ]之後的上述方法中,我的其他視圖如何知道這種情況何時發生?當UITableView關閉時我想要做的是讓我的其他視圖從我創建的實例中獲取標籤屬性,並使用該標籤從數據庫中檢索信息。

感謝您的幫助,非常感謝。

回答

0

如果您需要幾個控制器來響應表的解僱,您可能希望在viewWillDisappear或viewDidDisappear中使用NSNotificationCenter。更有可能你從一個viewController呈現,並且只有viewController正在等待學習選擇了什麼顏色。我建議使用委託/協議模式來處理它。

將這樣的東西添加到您的顏色拾取表myColorPickTableController。h文件的@interface線以上:

@class myColorPickTableController; 
@protocol myColorPickTableControllerDelegate 
-(void)myColorPickTableControllerDidSelectColor:(UIColor *)selectedColor sender:(myColorPickTableController *)sender; 
@end 

在該標頭添加屬性,以及,用於存儲參考代表(這是等待聽見被挑什麼顏色的控制器)。

@property(nonatomic, unsafe_unretained)id<myColorPickTableControllerDelegate> delegate; 

現在,

[delegate myColorPickTableControllerDidSelectColor:[UIColor whateverColorWasPicked] sender:self]; // Tell main screen user picked a color 

現在更換線

[ self.view removeFromSuperview ]; // Go back to main screen. 

在呈現控制器,需要通過添加到您的接口線,以符合協議

@interface myPresentingController : UIWhateverControllerIAm <myColorPickTableDelegate> // Add that part between <> 

現在,在myPres entingController.m您實現該方法

-(void)myColorPickTableControllerDidSelectColor:(UIColor *)selectedColor sender:(myColorPickTableController *)sender 
{ 
    [self saveTheSelectedColor:selectedColor]; 
    [sender.view removeFromSuperview]; // I am not so sure about that, should be presenting, maybe modally or use navigation controller. Should work thought, not my first choice. 
    sender = nil; // Just for good measure 
} 

最後,記得讓你呈現控制器myColorPickTableController的代表,當您創建它。設置代表像自己一樣

myColorPickTableController *pickTable = [myColorPickTableController alloc] init]; 
pickTable.delegate = self. 
+0

對不起,我花了幾個回到你身邊,但這個解決方案完美地工作。感謝您的幫助,非常感謝。 –

0

在您的子類別UITableViewController中,viewWillDisappearviewDidDisappear應在您的視圖被刪除後調用。嘗試在視圖消失時發送通知(查看NSNotificationCenter)。

+0

這聽起來像我在尋找的感謝。 –

+0

我選擇了協議委託模式,而且它的工作方式像一個魅力謝謝。 –

相關問題