Ich habe ein Raster von UIButtons. Wenn ich auf eine Schaltfläche "Bearbeiten" drücke, möchte ich, dass über jeder dieser Schaltflächen eine Löschschaltfläche erscheint, die, wenn sie gedrückt wird, die Schaltfläche (und die zugehörigen Daten) löscht. Ein bisschen wie Apples Home-Bildschirm, wenn Sie eine Schaltfläche gedrückt halten und es beginnt zu wackeln mit einem X in der Ecke.
Laut diesem Beitrag: Unterklasse UIButton zum Hinzufügen einer Eigenschaft Ich kann assoziative Verweise verwenden, um jeder meiner Schaltflächen eine Eigenschaft hinzuzufügen. Ich habe versucht, eine UIButton als Eigenschaft meiner benutzerdefinierten UIButton hinzufügen, aber ich kann nicht scheinen, um es zu erscheinen und haben das Gefühl, dies ist nicht der richtige Weg zu gehen. Hier ist meine benutzerdefinierte Schaltfläche main:
#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
Und hier füge ich die Schaltflächen programmatisch hinzu:
//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];
}
Gibt es eine einfachere und sinnvollere Möglichkeit, dies zu tun? Oder bin ich auf dem richtigen Weg?