0

我创建了一个这样的按钮:

UIButton *toTop = [UIButton buttonWithType:UIButtonTypeCustom];
toTop.frame = CGRectMake(12, 12, 37, 38);
toTop.tintColor = [UIColor clearColor];
[toTop setBackgroundImage:[UIImage imageNamed:@"toTop.png"] forState:UIControlStateNormal];
[toTop addTarget:self action:@selector(scrollToTop:) forControlEvents:UIControlEventTouchUpInside];

我有各种 UIView,我想一遍又一遍地使用同一个按钮,但我做不到。我尝试将相同的内容添加UIButton到多个视图中,但它总是出现在我添加它的最后一个位置。我也试过:

UIButton *toTop2 = [[UIButton alloc] init];
toTop2 = toTop;

这是行不通的。有没有一种有效的方法可以做到这一点,而无需一遍又一遍地为同一个按钮设置所有相同的属性?谢谢。

4

1 回答 1

2

UIViews 只能有一个超级视图。使用第二种方法,您只需分配一个按钮,然后将其丢弃并指定其指针指向第一个按钮。所以现在toTop两者toTop2都指向完全相同的按钮实例,你又回到了单一的超级视图限制。

因此,您需要创建单独UIButton的实例来完成此操作。在不重复代码的情况下做到这一点的一种方法是编写一个类别。像这样的东西应该工作:

UIButton+ToTopAdditions.h:

@interface UIButton (ToTopAdditions)

+ (UIButton *)toTopButtonWithTarget:(id)target;

@end

UIButton+ToTopAdditions.m:

@implementation UIButton (ToTopAdditions)

+ (UIButton *)toTopButtonWithTarget:(id)target
{
    UIButton *toTop = [UIButton buttonWithType:UIButtonTypeCustom];
    toTop.frame = CGRectMake(12, 12, 37, 38);
    toTop.tintColor = [UIColor clearColor];
    [toTop setBackgroundImage:[UIImage imageNamed:@"toTop.png"] forState:UIControlStateNormal];
    [toTop addTarget:target action:@selector(scrollToTop:) forControlEvents:UIControlEventTouchUpInside];
    return toTop;
}

@end

Import UIButton+ToTopAdditions.h,将适当的目标传递给方法(听起来就像self你的情况),你会得到尽可能多的相同按钮。希望这可以帮助!

于 2012-09-29T00:21:35.417 回答