簡體   English   中英

自定義UITableViewCell中的按鈕在iOS 7中不響應

[英]Button in custom UITableViewCell not responding in iOS 7

這或多或少是本文的延續: UITableViewCell中的按鈕在ios 7下不響應

我有相同的確切問題,並嘗試了線程中的每個建議。 顯然,我不擁有該問題,因此無法對其進行編輯以提供更多信息,因此,為什么我現在要發布此問題!

問題:

我加載的VC nib包含一個tableview,可根據其中的行數調整大小。 每行都是使用nib文件從自定義uitableviewcell子類生成的。 該班級/筆尖有4個按鈕。 我現在可以在iOS 6或iOS 8中加載此代碼,並且可以完美運行。 我沒有iOS 7設備,所以我綁定到了7.1版的模擬器(我想是報告該問題的用戶使用的版本以及今天的版本)。 現在,在模擬器和用戶的電話中,我可以觸摸/單擊該VC上除單元格中任何其他按鈕之外的所有其他內容。 就像他們將UserInteractionEnabled設置為NO一樣,但是它們沒有,並且它們的任何父視圖也不是(我將很快講到)。

嘗試過的解決方案:

-使用和不使用自動布局完全重新創建筆尖

-在單元格類的awakeFromNib中調用[self.contentView addSubview:button]

-嘗試在運行時使用[self.contentView addSubView:button]將按鈕重新添加到contentView

-確保四次遍歷后,我可以發現導致這些按鈕的層次結構中的每個視圖的userInteractionEnabled設置為YES。 (包括但不限於表格視圖本身,單元格, contentView以及當我向設置的按鈕添加“父視圖”時)

-嘗試使用父視圖提高所有按鈕,該視圖只包含按鈕

-所有按鈕都位於事件堆棧的頂部(可視底部)(添加和刪除是其他兩個按鈕): 層次結構清單

-已將表格單元格選擇從單個設置為無。

-我沒有在單元格類中覆蓋layoutSubviews

-我無法將任何視圖移出內容視圖,因為如果這樣做,Interface Builder會將其完全移出單元格。

-我嘗試在運行時僅在ContentView上禁用userInteractionEnabled而不進行任何更改

-我嘗試放入[cell bringSubviewToFront:cell.button];的單元格創建代碼[cell bringSubviewToFront:cell.button]; 為不同的按鈕獲得相同的結果。

希望有幫助的事實:

-我嘗試將層次結構中所有視圖的所有背景色設置為不同的顏色,以便可以在運行時直觀地對其進行調試...它看起來完全符合預期。 沒有重疊或覆蓋。 (這僅限於單元格中的視圖)

-這是TableView的所有設置: TableView SS 1TableView SS 2

-我嘗試將其加載到新的XCode 6中以使用可視調試器,但其中隨附的7.1仿真器實際上完美地運行了代碼,因此我可以對其進行調試...

-這是VC中的出隊代碼:

NiTGroupTimeCell* cell = (NiTGroupTimeCell*)[tableView dequeueReusableCellWithIdentifier:ident forIndexPath:indexPath];

-這是VC的viewDidLoad中的代碼,用於用表格設置單元格筆尖(為2,因為這是從頭開始的):

[self.timesTable registerNib:[UINib nibWithNibName:@"NiTGroupTimeCell2" bundle:nil]  forCellReuseIdentifier:@"GroupTime"];

-所有連接均通過IB建立。 這些都使用IBAction或IBOutlet。

-我在所有按鈕方法中都有NSLog語句來測試它們是否被實際調用,但是我還使用斷點進行了測試。 所有這些都不會在測試中觸發。

-唯一實現的TableView委托或數據源方法如下:

-(int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
-(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

-根據建議,我對Revel進行了研究,發現視圖中存在一個神秘的UILabelUIImageView ....但是您可以看到它們的幀全為零,所以它們不應該妨礙任何事情,所以請回到我怕在哪里:

層數

Revel的層次結構列表

UILabel框架: UILabel框架

UIImageView框架: UIImageView框架

IIRC我之前認為這是一個模擬器錯誤,但是由於它是在用戶設備上發生的,因此這必須是一個實際問題,並且它阻礙了我的工作流程,因此將非常感謝您的幫助! 提前致謝!

PS我很樂意發布任何內容,但是由於調試方面的所有變化,我不知道確切地人們會想看到什么,並且我不想超載這篇文章,因為我知道這將花費很多時間其他。

所以顯然問題是這些代碼行(來自我的git diff輸出的diff格式):

--(int)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
+-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{

--(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
+-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

所以,是的。。。似乎在iOS7 +中,如果您為這些數據源方法使用“舊”輸出類型,它看上去會很好,但在功能上卻使您的表視圖...好時機,但是,現在它已修復^^希望對其他人有所幫助。

我懷疑您的自定義UITableViewCell子類NiTGroupTimeCell或從筆尖到tableViewCell子類的IBAction連接是否存在問題。
我也想知道額外的空UILabel和UIImageView。 它們聽起來像UITableViewCell.h, UIImageView *imageView UILabel *textLabelUILabel *textLabel聲明的默認屬性。 它們被實例化(並且不為零)的事實可能是您所看到的怪異,意外行為的線索。
您是否有IBOutlet到UIButton? 如何更改按鈕的屬性(以代碼形式)(例如背景色)以確保您實際上將它們保留在NiTGroupTimeCell

您是說您嘗試過[self.contentView addSubview:button],但您第一張圖片中的按鈕位於contentView內部的視圖內。 嘗試將IBOutlet鏈接到該視圖,然后嘗試[nameOfView addSubview];

似乎您已經涵蓋了幾乎所有其他內容,因此引發了一個瘋狂的猜測。

你說:

我加載了其中有一個tableview,我根據其中有多少行來調整大小

並且您發布了一個屏幕截圖,說UITableView上的clip subviews已關閉

您是否未正確設置tableview的框架,但由於未修剪子視圖而仍然顯示了單元格?

再次加載reveal並檢查UITableView的高度

不知道是否是這種情況。 但是,如果你的名字自定義單元格網點imageViewtextLabel或任何“內置”的UITableViewCell的屬性,你會得到奇怪的結果和行為。

您需要檢查幾件事:

  1. 確保按鈕的所有父視圖都啟用了“ User Interaction
  2. 在大小檢查AutoSizing中檢查“ AutoSizing調整大小”,並確保按鈕位於視圖內,以便它可以接收觸摸事件,否則觸摸事件將被忽略。 您可以通過更改視圖的顏色來進行驗證。 更改顏色或NSLog按鈕和父視圖的框架將幫助您解決此問題。
  3. 如果是從IB設計,​​請嘗試使事情更簡單,不要addSubView編程方式添加addSubView
  4. 確保某些組件沒有與clearColor背景色重疊按鈕。

對我有用的是:

self.contentView.userInteractionEnabled = NO;

我從筆尖/情節提要加載自定義單元格后調用了此命令。 沒有將userinteractionEnabled設置為NO,我的按鈕就無法以某種方式響應觸摸。 我的contentView已收到所有觸摸,並且沒有將它們轉發給我的按鈕。

我在哪里看過代碼

[cell bringSubviewToFront:button]

已被用作解決方法,對我而言,它並沒有解決問題。

我在添加基於Guestures的自定義Acions時遇到了類似的問題。

我在UITableViewCell的Inherited class中的運行時上添加了Action Button。行為是,如果我在可見的rect之外添加按鈕,則在對其中的按鈕設置動畫之后,我無法單擊/點擊。 但是在“我的情況”下,如果在可見矩形中添加了按鈕,我便可以輕按/單擊。

對我有用的是,我在View添加了這些按鈕,而不是UITableViewCell的ContentView ,然后僅對Content View進行了動畫處理。 您可以嘗試類似的東西

-維沙爾

您已經說過沒有TouchRecognizers(TapRecognizers?),但是我認為您應該仔細檢查一下,不僅要尋找觸摸識別器,還要尋找使用該單元格的控制器中的任何識別器,甚至添加到self.view / tableView 。 我最近試圖找出為什么不選擇單元格(未調用delegate方法)只是為了發現我添加了2個手勢識別器(在代碼中,這些手勢識別器是其他事情所必需的,但是我必須這樣做)以其他方式)將阻止單元格選擇。

同樣的跡象可能是,如果您按住按鈕足夠長的時間(在那里放置斷點,這樣您可以更輕松地進行操作),動作就會觸發。

暫無
暫無

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

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