У меня есть сетка UIButtons. Когда я нажимаю кнопку «Изменить», я хочу, чтобы на каждой из этих кнопок появилась кнопка удаления, которая при нажатии удаляет кнопку (и связанные с ней данные). Немного похоже на домашний экран Apple, когда вы удерживаете кнопку, и она начинает шевелить с помощью X в углу.Создайте пользовательский класс UIButton с функцией удаления
В соответствии с этим постом: 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];
}
Есть ли более простой более разумный способ сделать это? Или я на правильном пути?
Вы никогда не устанавливали кнопку удаления. Также ваш ассоциативный метод просто отменяет установленную вами кнопку удаления. – Joe