簡體   English   中英

表格視圖:禁用行或發出警報以停止搜索?

[英]Table view: disable a row or make an alert which stop a segue?

我在其viewDidLoad中填充了兩個表視圖,其中的數據來自包含商店名稱的sqllite數據庫。 在第一個視圖中,我選擇一個元素(即一個商店),然后在第二個視圖中,我必須選擇與第一個不同的另一個商店。

填滿第二張表視圖的一行后,我可以禁用它嗎?

我試圖不在第二個視圖中加載(第一個所選商店的名稱)的名稱,但是我在其viewDidLoad中填充了表格視圖,但是不幸的是,直到viewDidAppear和那一刻來不及填滿表格視圖。

我也嘗試以這種方式向在第二個視圖中選擇一行的事件添加警報

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
   NSString *choosenSecondShop= [secondShop objectAtIndex:indexPath.row];
   NSString* nameFirstShop = [function loadFirstShopChoosen]; 

   if ([choosenSecondShop isEqualToString:nameFirstShop]) {
       NSString *message=@"Second shop cannot match the first";
       alert = [[UIAlertView alloc] initWithTitle:@"Errore"
            message: message
            delegate: self cancelButtonTitle: @"Ok" 
            otherButtonTitles:nil, 
            nil];
       [alert show];
    }else {
        // go on with the app's stuff!
    }
}

但在這種情況下,會顯示警報,但隨后還會顯示提示。 我可以阻止segue繼續嗎?

有幾種不同的方法可以解決此問題:

1.有條件的搜索

盡管我不確定從用戶體驗的角度來看這是一個好主意,但這應該可以工作。

大概您是從表格單元格開始在IB中進行搜索? 當您執行此操作時,將獲得不需要任何代碼來執行segue的便利(在您點擊表格單元格時,它會自動完成),但是您也無法對其進行任何運行時控制。

如果需要通過程序控制是否/何時/執行哪個序列,則應從視圖控制器本身(而不是從其中的控件)開始創建序列,並在IB中為序列提供唯一標識符。 然后,在您的tableView:didSelectRowAtIndexPath:實現中,一旦知道要執行segue,就可以調用[self performSegueWithIdentifier:@"myIdentifier"]

2.禁用單元格選擇

為了防止選擇特定的單元格,您的表視圖控制器可以實現tableView:willSelectRowAtIndexPath:為您不希望用戶選擇的任何索引路徑返回nil

如果這樣做,您可能想向用戶表明可以選擇哪些行-您可以在tableView:cellForRowAtIndexPath:更改單元格的外觀。

3.不要顯示單元格

您說要在viewDidLoad填充表視圖,但實際上並不能這樣工作:表視圖通過在需要時調用數據源和委托方法來填充自身。 如果要防止將數據集中的項目顯示為表格中的單元格,則只需更改數據源和委托方法的行為即可:

  • tableView:numberOfRowsInSection:返回的數字應比其他情況少
  • tableView:cellForRowAtIndexPath:應該反映該項目的刪除; 就像是:

     MyShop *shop; if (indexPath.row < indexOfFirstShop) shop = [shops objectAtIndex:indexPath.row]; else shop = [shops objectAtIndex:(indexPath.row + 1)]; // then configure cell for the chosen shop 

現在,如果您在第一次調用這些方法時不知道要隱藏哪一行,那么一旦獲得該信息,您需要做的就是告訴表視圖它需要再次調用它們: [self.tableView reloadData]應該可以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM