![](/img/trans.png)
[英]Why is my custom accessory button not changing image when tapped (ios)?
[英]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 ...");
}
現在的問題是:當我點擊這個按鈕時,它的圖像只會在該行突出顯示時消失,我嘗試了該按鈕的UIControlStateNormal
和UIControlStateHighlighted
狀態,但問題仍然存在,正如我所提到的。 如果我在未選擇(或突出顯示)表格視圖行的情況下點擊該按鈕,則按鈕圖像不會有任何問題(它不會消失)。 我該如何解決這個問題?
只需設置 UIButton。 所有 4 個狀態的圖像到 IB 中的相同圖像。
當您 select 來自列表的圖像或輸入名稱時請注意,請確保單擊文本字段。 IB似乎沒有節省價值。
Go 返回所有 4 個狀態並檢查保存的圖像名稱。
在自定義附件按鈕中為UIControlStateHighlighted
或UIControlStateSelected
添加圖像。
[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.