[英]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的所有設置:
-我嘗試將其加載到新的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進行了研究,發現視圖中存在一個神秘的UILabel
和UIImageView
....但是您可以看到它們的幀全為零,所以它們不應該妨礙任何事情,所以請回到我怕在哪里:
UILabel框架:
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 *textLabel
和UILabel *textLabel
聲明的默認屬性。 它們被實例化(並且不為零)的事實可能是您所看到的怪異,意外行為的線索。
您是否有IBOutlet到UIButton? 如何更改按鈕的屬性(以代碼形式)(例如背景色)以確保您實際上將它們保留在NiTGroupTimeCell
。
您是說您嘗試過[self.contentView addSubview:button],但您第一張圖片中的按鈕位於contentView內部的視圖內。 嘗試將IBOutlet鏈接到該視圖,然后嘗試[nameOfView addSubview];
似乎您已經涵蓋了幾乎所有其他內容,因此引發了一個瘋狂的猜測。
你說:
我加載了其中有一個tableview,我根據其中有多少行來調整大小
並且您發布了一個屏幕截圖,說UITableView
上的clip subviews
已關閉
您是否未正確設置tableview的框架,但由於未修剪子視圖而仍然顯示了單元格?
再次加載reveal
並檢查UITableView
的高度
不知道是否是這種情況。 但是,如果你的名字自定義單元格網點imageView
, textLabel
或任何“內置”的UITableViewCell
的屬性,你會得到奇怪的結果和行為。
您需要檢查幾件事:
User Interaction
。 AutoSizing
中檢查“ AutoSizing
調整大小”,並確保按鈕位於視圖內,以便它可以接收觸摸事件,否則觸摸事件將被忽略。 您可以通過更改視圖的顏色來進行驗證。 更改顏色或NSLog
按鈕和父視圖的框架將幫助您解決此問題。 addSubView
編程方式添加addSubView
。 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.