簡體   English   中英

UITableView 自定義附件按鈕圖像在點擊時消失

[英]UITableView custom accessory button image disappears when tapped

我有一個 UITableView 和一個自定義附件按鈕,如下所示:

cellForRowAtIndexPath方法中,我執行以下操作:

  ...
  UIButton *myAccessoryButton =[[[UIButton alloc] init] autorelease];   
  myAccessoryButton =[self makeAccessoryButton: @"arrow2.png"];
 [cell setAccessoryView:myAccessoryButton];
 return cell;

function makeAccessoryButton定義如下:

- (UIButton *) makeAccessoryButton: (NSString *) imageName
{

UIButton *myAccessoryButton = [[UIButton buttonWithType:UIButtonTypeCustom] autorelease];
CGRect frame = CGRectMake(0, 0, 24, 24);
myAccessoryButton.frame = frame;
[myAccessoryButton setBackgroundColor:[UIColor clearColor]];
[myAccessoryButton setImage:[UIImage imageNamed:imageName] forState: UIControlStateNormal];
[myAccessoryButton addTarget: self
                      action: @selector(accessoryButtonTapped:withEvent:)
            forControlEvents: UIControlEventTouchUpInside];
//myAccessoryButton.userInteractionEnabled = YES;
return ( myAccessoryButton );

}

function 定義如下:

 - (void) accessoryButtonTapped: (UIControl *) button withEvent: (UIEvent *) event
{   
NSLog(@"testing ...");
}

現在的問題是:當我點擊這個按鈕時,它的圖像只會在該行突出顯示時消失,我嘗試了該按鈕的UIControlStateNormalUIControlStateHighlighted狀態,但問題仍然存在,正如我所提到的。 如果我在未選擇(或突出顯示)表格視圖行的情況下點擊該按鈕,則按鈕圖像不會有任何問題(它不會消失)。 我該如何解決這個問題?

只需設置 UIButton。 所有 4 個狀態的圖像到 IB 中的相同圖像。

當您 select 來自列表的圖像或輸入名稱時請注意,請確保單擊文本字段。 IB似乎沒有節省價值。

Go 返回所有 4 個狀態並檢查保存的圖像名稱。

在自定義附件按鈕中為UIControlStateHighlightedUIControlStateSelected添加圖像。

[myAccessoryButton setImage:[UIImage imageNamed:imageName] forState:UIControlStateHighlighted];

這也讓我抓狂了!

這里的問題是 UIButton 繼承了選定的 state 然后它的 imageView 的選定狀態設置錯誤。

要修復它,子類 UITableViewCell 並覆蓋 setSelected 方法

- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
    [super setSelected:selected animated:animated];
    if ([self.accessoryView isKindOfClass:[UIButton class]])
    {
        UIButton *button = (UIButton*) self.accessoryView;
        [[button imageView] setHighlighted:NO];
    }
}

您正在此行中自動發布自動發布的 object

UIButton *myAccessoryButton = [[UIButton buttonWithType:UIButtonTypeCustom] autorelease];

雖然它應該像

UIButton *myAccessoryButton = [UIButton buttonWithType:UIButtonTypeCustom];

也代替此代碼

UIButton *myAccessoryButton =[[[UIButton alloc] init] autorelease];   
  myAccessoryButton =[self makeAccessoryButton: @"arrow2.png"];
 [cell setAccessoryView:myAccessoryButton];
 return cell;

你可以簡單地做到這一點

 [cell setAccessoryView:[self makeAccessoryButton: @"arrow2.png"]];
 return cell;

嘗試上述建議並為所有三個狀態設置圖像

[myAccessoryButton setImage:[UIImage imageNamed:imageName] forState: UIControlStateNormal];

[myAccessoryButton setImage:[UIImage imageNamed:imageName] forState: UIControlStateHighlighted];

[myAccessoryButton setImage:[UIImage imageNamed:imageName] forState: UIControlStateSelected];

讓我知道這是否有效。

暫無
暫無

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

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