簡體   English   中英

在iOS中,為什么viewWithTag方法返回nil?

[英]In iOS , Why will viewWithTag method return nil?

今天,我遇到了一件非常奇怪的事情。

我有一個由Storyboard構建的tableview。
表格視圖的類型為“ 靜態”和“分組”
在它的一個Cell中,我有一個帶開關的單元(在Storyboard中設置為ON )。
我通過Storyboard將開關的標簽設置為10000816。

我嘗試使用[self.tableview viewWithTag 10000816]在tableview的控制器中獲取開關。 失敗了

好。 然后,我嘗試首先獲取Cell並嘗試[cell viewWithTag],以某種方式,它成功了。

然后我想知道為什么。
所以我只留下了下面的注釋。

UITableViewCell* cell =  [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

跟隨者

UISwitch* switchButton = [self.tableView viewWithTag: 10000816];
    [switchButton setOn:NO animated:YES];

OK,這次,再次成功。
我評論了與我無關的Get-Cell系列。
然后發生了奇怪的事情。失敗了。 我所做的唯一更改只是一條無關緊要的路線。 這么奇怪。

如果我只注釋Get-Cell行,為什么viewWithTag返回nil?

- (void) switchOff{ 
  //****** the line below is the magic Get-Cell  line , if I comment this line , viewWithTag will return nil    
     UITableViewCell* cell =  [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];


    UISwitch* switchButton = [self.tableView viewWithTag: 10000816];    
    [switchButton setOn:NO animated:YES];  
}

[更新]
我的switchOff在-(void)viewDidAppear中被調用:

- (void)viewDidAppear:(BOOL)animated{
    [self switchOff]
}

如果您的表視圖是一個原型(其值將由cellForRowAtIndexPath方法填充),然后將一個單元格放到表視圖中,您將不會看到該單元格,因為該單元格尚未創建,因此它的內容也沒有創建。

如果您的表格視圖是靜態的,則只有這樣,才會顯示單元格的情節提要的內容,並且您將獲得帶有該標記的單元格內的控件。

我認為您的tableview是一個原型,並且由於未創建單元格,因此您的[self.tableview viewWithTag 10000816]返回nil,因為尚未創建該控件。

希望可以讓你理解

暫無
暫無

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

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