【发布时间】:2012-04-28 22:48:59
【问题描述】:
我有一个 UIButton 网格。当我点击“编辑”按钮时,我希望在每个按钮上出现一个删除按钮,按下该按钮会删除按钮(和相关数据)。有点像苹果的主屏幕,当你按住一个按钮时,它开始摆动,角落里有一个 X。
根据这篇文章:Subclass UIButton to add a property 我可以使用关联引用为我的每个按钮添加一个属性。我试图添加一个 UIButton 作为我的自定义 UIButton 的属性,但我似乎无法让它出现并且感觉这不是正确的方法。这是我的自定义主按钮:
#import "UIButton+Property.h"
#import <objc/runtime.h>
@implementation UIButton(Property)
static char UIB_DELETEBUTTON_KEY;
@dynamic deleteButton;
- (void)setDeleteButton:(UIButton *)deleteButton {
deleteButton = [UIButton buttonWithType:UIButtonTypeInfoDark];
deleteButton.frame = CGRectMake(100, 100, 50, 50);
objc_setAssociatedObject(self, &UIB_DELETEBUTTON_KEY, deleteButton, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (UIButton *)deleteButton {
return (UIButton *)objc_getAssociatedObject(self, &UIB_DELETEBUTTON_KEY);
}
@end
这是我以编程方式添加按钮的地方:
//Create a custom button for each custom book doc
for (int i = 0; i < [customBookDocs count]; ++i) {
BookDoc *customBookDoc = [customBookDocs objectAtIndex:i];
NSString *bookTitle = customBookDoc.book.title;
//create a button for each book
CGRect frame = CGRectMake(xCoord, yCoord, 200, 200);
UIButton *bookButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
bookButton.bookDoc = customBookDoc;
[bookButton setFrame:frame];
[bookButton setTitle:bookTitle forState:UIControlStateNormal];
[bookButton addTarget:self action:@selector(bookButtonPressed:) forControlEvents:UIControlEventTouchUpInside];
xCoord += 250;
[self.view addSubview:bookButton];
[self.view addSubview:bookButton.deleteButton];
}
有没有更简单、更明智的方法来做到这一点?还是我走在正确的轨道上?
【问题讨论】:
-
您从未真正设置过删除按钮。此外,您的关联方法只会覆盖您设置的删除按钮。
标签: ios objective-c iphone xcode uibutton