gpt4 book ai didi

ios - UIButton 类别问题

转载 作者:行者123 更新时间:2023-11-29 11:10:51 27 4
gpt4 key购买 nike

我已经对 UIButton 类进行了扩展。现在,如果我使用它,一切都很好。但是我有另一个类使用 UIButton 对象为我创建数组,这里我遇到了一些问题。

我有一个 Helper 类,其方法为我返回带有 UIButton 对象的 array

在 viewDidLoad 回调中的 ViewController.m 中,我请求这个数组,也在 ViewController.m 中,我导入了我的 UIButton+Extension.m

所以,现在我对将在 ViewController.m 中使用的每个 UIButton 对象有了扩展

但是如果我使用扩展程序,我会在调用方法时遇到错误

[thumbButton.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:11.0]];

但如果我不使用扩展,则此方法调用正确。

这是我的 UIButton+Extension.h 文件

#import <UIKit/UIKit.h>

@interface UIButton (extension_button)

- (void)centerButtonToView:(UIView *)view;
- (UIImage *)cropeImage:(UIImageView *)imageView;

@end

这是我的 UIButton+Extension.m 文件

#import "UIButton+Extension.h"

@implementation UIButton (extension_button)

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
}
return self;
}

- (void)centerButtonToView:(UIView *)view {
CGRect rect = view.frame;
CGRect rectSelf = self.frame;
rectSelf.origin.x = (rect.size.width / 2.0f - rectSelf.size.width / 2.0f) + rect.origin.x;
rectSelf.origin.y = (rect.size.height / 2.0f - rectSelf.size.height / 2.0f) + rect.origin.y;
self.frame = rectSelf;
}

- (UIImage *)cropeImage:(UIImageView *)imageView {
CGRect rect;
rect.origin.x = self.frame.origin.x - imageView.frame.origin.x;
rect.origin.y = self.frame.origin.y - imageView.frame.origin.y;
rect.size.width = self.frame.size.width;
rect.size.height = self.frame.size.height;
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGRect drawRect = CGRectMake(-rect.origin.x,-rect.origin.y, imageView.image.size.width, imageView.image.size.height);
CGContextClipToRect(context, CGRectMake(0, 0, rect.size.width, rect.size.height));
[imageView.image drawInRect:drawRect];
UIImage* subImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return subImage;
}

@end

Helper.m(为我返回数组的方法,这里我在 setFont 方法上有问题)

+ (NSMutableArray *)createThumbnailsForCropSize {

CGFloat width = 0.0f;
CGFloat start_pos = 0.0f;

if (IS_IPHONE) {
width = 320.0f;
start_pos = 62.0f;
}
else {
width = 768.0f;
start_pos = 286.0f;
}

NSMutableArray *arr = [[NSMutableArray alloc] init];
NSArray *resolutionArray = [NSArray arrayWithObjects:@"30x40",@"33x48",@"35x40",@"35x45",@"36x47",@"37x47",
@"40x50",@"40x60",@"43x55",@"45x50",@"50x50",@"50x70", nil];
NSInteger pos_x = start_pos;
NSInteger page = 0;
for (NSInteger idx = 0; idx < 12; idx++) {
if (idx%3 == 0 && idx != 0) {
page++;
pos_x = start_pos + width * page;
}
UIButton *thumbButton = [[UIButton alloc] init];
[thumbButton setTag:idx];
[thumbButton setFrame:CGRectMake(pos_x, 13, 60, 60)];
[thumbButton setTitle:[NSString stringWithFormat:[resolutionArray objectAtIndex:idx]] forState:UIControlStateNormal];
[thumbButton.titleLabel setFont:[UIFont fontWithName:@"Helvetica" size:11.0]];
[thumbButton setTitle:@"!00" forState:UIControlStateNormal];
[thumbButton setBackgroundImage:[UIImage imageNamed:@"block_without_photo.png"] forState:UIControlStateNormal];
[arr addObject:thumbButton];
pos_x += 68;
}
return arr;
}

最佳答案

您需要从您的类别中删除 initWithFrame:。通过包含它,您将删除正常的实现,这将阻止您的按钮被正确创建,您实际上将返回一个 UIControl

调用类别中的super实现不是调用UIButton的实现,而是UIButton的父类(super class)> - UIControl。类别不同于子类。 (而且您也不应该将 UIButton 子类化,因为它是一个类簇)。

如果您确实有专门的初始化代码,则必须将其添加到单独的方法中并在创建循环中调用它。

关于ios - UIButton 类别问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11647040/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com