gpt4 book ai didi

iphone - Objective-C 使用 typedef enum 来设置类行为,就像 Cocoa 一样

转载 作者:行者123 更新时间:2023-12-03 21:00:00 26 4
gpt4 key购买 nike

我扩展了 UIButton 类,以便能够设置 UINavigationBarButton 的字体和颜色(从此代码示例中: switch on the code )

我是这样的:

@interface NavBarButtonGrey : UIButton 
-(id)init;

@end


@implementation NavBarButtonGrey

-(id)init {
if(self = [super init]) {
self.frame = CGRectMake(0, 0, 49.0, 30.0);
self.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

UIImage *image = [UIImage imageNamed:@"greyNavButton.png"];
UIImage *stretchImage =
[image stretchableImageWithLeftCapWidth:15.0 topCapHeight:0.0];
[self setBackgroundImage:stretchImage forState:UIControlStateNormal];
self.backgroundColor = [UIColor clearColor];
[self setTitleShadowColor:[UIColor blackColor] forState:UIControlStateNormal];
self.titleShadowOffset = CGSizeMake(0, -1);
self.titleLabel.font = [UIFont boldSystemFontOfSize:13];
}

return self;
}
@end

这还可以,但当然不是很灵活。如何使用 typedef 枚举(像 Apple 那样)来合并所有不同的我希望自定义按钮符合的颜色、字体和大小。

我能从 UIKit 的界面文件中得到的唯一结果是它是这样完成的:

typedef enum {
RGCustomNavBarButtonStyleBlue,
RGCustomNavBarButtonStyleGrey,
RGCustomNavBarButtonStyleBlack,
RGCustomNavBarButtonStyleGreen,
RGCustomNavBarButtonStyleRed,
} RGCustomNavBarButtonStyle;

如何从中获取并进入一个工作实现,通过构造函数(initWithStyle)从枚举值获取字体、大小、颜色等?

Objective C 中是否重载构造函数?多个构造函数?

希望这是有道理的,并感谢您提供的任何帮助:)

最佳答案

为了扩展上面 ennukiller 所说的内容,我被教导(Hillegass 的书)选择一个初始化程序 - 通常是具有最多选项的初始化程序,例如 initWithFont:andColor: - 并让其他初始化程序调用它。该主初始化程序称为指定初始化程序。

所以你的代码将有一个完全实现的 initWithFont:andColor: 调用 [super init],然后你还有一个 initWithFont: 看起来像这样:

-(MyClass) initWithFont: (UIFont) font
{
[self initWithFont:font andColor:RGCustomNavBarButtonStyleBlack];
}

然后你的 initWithFont:andColor: 将处理所有其他设置并调用 [super init]。

关于iphone - Objective-C 使用 typedef enum 来设置类行为,就像 Cocoa 一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1642976/

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