2011-10-06 209 views
0

我在UINavigationController中使用UITableView如何從當前屏幕刷新UITableView

在第一屏幕上我有一個名稱爲alen,john,smith的表格視圖。他們有3條記錄。現在我進入第二個屏幕,並更新數據庫中所有三條記錄的名稱。 在我的第一個控制器中顯示UITableView,我在viewWillApear委託方法中使用了[seld.tableView reloadData]。每當我回到第一個屏幕時,我的viewWIllApear代表方法調用和我的UITableView刷新自己。

現在的問題是如果我從我自己的任何方法調用[self.tableview reloadData]而不是viewWIllApear。它會調用我的ViewDidLoad方法,但它不會調用我的uitableView委託來更新我的記錄。 PLease任何人都可以幫助我如何更新我的tableView保持在同一屏幕上。 ?

非常感謝

編輯:

- (void)viewDidAppear:(BOOL)animated { 
     [activityIndicator stopAnimating]; 
     [self.tableView reloadData]; 
     [super viewDidAppear:animated]; 
    } 

這是我ViewDidappear方法。我想要的是,只要我點擊任何按鈕保持在同一個UITableView屏幕上,它應該重新加載我的tableView,而不管數據數組中是否有任何變化。

+0

顯示一些你的代碼請參考 – booleanBoy

回答

0

結構中的這些按鈕在哪裏?他們是以編程方式創建的? 他們是uibutton子類嗎? 即你打電話的方法在哪裏?這聽起來像你有自己的方法引用tableViewController的問題?

也許你應該在tableViewController上創建一個方法,然後從按鈕中調用它。請顯示您的方法代碼,並指出方法所處的文件。

0

示例A:您創建按鈕或其他所有內容都可能會觸發界面構建器中的操作。持有的tableview中使用的方法類似下面的的viewController內部:

- (IBAction)updateTable:(id)sender 
{ 
    [self.tableview reloadData]; 
} 

很明顯,你必須出口與IB的動作連接。

示例B:以編程方式創建按鈕。

// inside your loadView or viewDidLoad method 
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
[button addTarget:self 
     action:@selector(updateTable) 
forControlEvents:UIControlEventTouchDown]; 
[button setTitle:@"Show View" forState:UIControlStateNormal]; 
button.frame = CGRectMake(x,y,width,hieght); 
[yourView addSubview:button]; 

在你的ViewController:

-(void)updateTable 
{ 
    [self.tableView reloadData]; 
} 
0

如果您UITableViewDelegate方法沒有開始叫,那麼無論你tableView出口未設置,或tableView沒有delegate集。因爲你似乎有多個視圖控制器(一個使用tableView,另一個使用UIButton),那麼你應該考慮如何在視圖控制器之間進行最佳通信 - 通過傳遞tableView(打破封裝,所以不好),通過代理/協議方法調用,通過NSNotification或其他適當方式。

+0

但我的uitableview插座已設置。它實際上會在我的屏幕重新出現時加載數據。那麼當我調用[self.tableView reloadData]時,它不會被刷新? – Shah

+0

我建議你在該行上用斷點運行調試器,然後檢查[self tableView]的值,然後[[self tableView] delegate]。如果這是在表視圖和委託代碼中的一個單獨的視圖控制器中,那麼這些值將不會被設置。 –