我是UIButton的子类,我想要的是将按钮类型设置为Round Rect.
Button.h
@interface Button : UIButton {}
- (void)initialize;
@end
Run Code Online (Sandbox Code Playgroud)
Button.m
@implementation Button
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self initialize];
}
return self;
}
-(id)initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if(self){
[self initialize];
}
return self;
}
- (void)initialize
{
self.titleLabel.font = [UIFont systemFontOfSize:20];
self.titleLabel.textColor = [UIColor redColor];
self.titleLabel.textAlignment = UITextAlignmentCenter;
//[UIButton buttonWithType:UIButtonTypeRoundedRect];
}
@end
Run Code Online (Sandbox Code Playgroud)
在这里我尝试[UIButton buttonWithType:UIButtonTypeRoundedRect]但它不起作用.任何人都可以建议如何使其工作?
我在之前的许多文章中都知道,不推荐使用Subclassing UIButton,但事实上在Developer's Docs中没有提及NOT子类化它.
我想在表视图的右侧添加加号按钮,以在其他视图中添加该单元格的内容.
如何在表视图的右侧添加加号按钮.
所以,我正在尝试将a更改为UILabela UIButton的实例FXLabel.有关更多信息,请访问该链接FXLabel(https://github.com/nicklockwood/FXLabel).我知道通过使用类扩展(Subclass UIButton来添加属性),我总是可以添加另一个属性,在我的情况下,FXLabel只是添加一个子视图.但是,我喜欢titleLabel已经出现的物业的便利性和特色.
有一些方法来"开关"的UILabel一个FXLabel由子类或类别?
我知道我可以做到这一点,但这是一个黑客,并不是未来的证据.而且我不知道如何更改类类型(从UIButton中取出UILabel).
UILabel *label;
for (NSObject *view in button.subviews) {
if ([view isKindOfClass:[UILabel class]]) {
label = (UILabel *)view;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
思考?谢谢.

正如我的屏幕截图显示我正在进行单词匹配游戏.在这个游戏中,我将我的单词分配给不同位置的特定序列中的不同UIButton(我的红色箭头显示此序列)和其余的UIButtons我指定一个随机字符( AZ).当我点击任何UIButtons时,它的标题将分配给UILabel,它位于当前部分的Fornt:我将这个UILabel文本放在UILabels文本下面,该文本不是计时器.当它与我的任何UILabel匹配时它的意志被删除.我已经实现了所有这个过程.
但我的问题是黑线表示的问题.如果玩家发现第一个单词是"DOG".他点击顺序中的两个UIButtons,但不按顺序中的第三个.(如黑线所示).这里我想要当玩家按下任何不在序列中的UIButtons然后删除之前的文本(这是" UILabel的DO",现在UILabel的文本只是"G".这是我获取UIButtons标题并将其分配给UILabel的代码.
- (void)aMethod:(id)sender
{
UIButton *button = (UIButton *)sender;
NSString *get = (NSString *)[[button titleLabel] text];
NSString *origText = mainlabel.text;
mainlabel.text = [origText stringByAppendingString:get];
if ([mainlabel.text length ]== 3)
{
if([mainlabel.text isEqualToString: a]){
lbl.text=@"Right";
[btn1 removeFromSuperview];
score=score+10;
lblscore.text=[NSString stringWithFormat:@"%d",score];
words=words-1;
lblwords.text=[NSString stringWithFormat:@"%d",words];
mainlabel.text=@"";
a=@"tbbb";
}
else if([mainlabel.text isEqualToString: c]){
lbl.text=@"Right";
[btn2 removeFromSuperview];
score=score+10;
lblscore.text=[NSString stringWithFormat:@"%d",score];
words=words-1;
lblwords.text=[NSString stringWithFormat:@"%d",words];
mainlabel.text=@"";
c=@"yyyy";
}
else
if([mainlabel.text isEqualToString: d]){
lbl.text=@"Right";
[btn3 removeFromSuperview];
score=score+10;
lblscore.text=[NSString stringWithFormat:@"%d",score];
words=words-1;
lblwords.text=[NSString stringWithFormat:@"%d",words];
mainlabel.text=@"";
d=@"yyyy";
} …Run Code Online (Sandbox Code Playgroud) 我在这里看到了一个非常好的示例: 子类UIButton来添加属性
它是什么?您无法将对象添加到类别.但现在有了这个技巧你可以.
那是什么?它是如何工作的?
Objective-c对象已经有一些常数的ivar指针了吗?
现在你再添加一个?他们是怎么想出来的?
我必须承认,这是一个非常丑陋的符号.
我想为NSNumber类添加一个属性,所以我必须将它子类化.文档说明我必须覆盖所有NSValue原语方法.由于NSValue文档没有说明哪些方法是原始方法,我认为这两个方法可能是实例化的原始方法:
– initWithBytes:objCType:
+ valueWithBytes:objCType:
Run Code Online (Sandbox Code Playgroud)
所以我把我的课程改为:
@interface MultipleNumber : NSNumber {
NSNumber *_number;
}
@property (nonatomic, getter = isMultiple) BOOL multiple;
@end
@implementation MultipleNumber
@synthesize multiple=_multiple;
-(id)initWithBytes:(const void *)value objCType:(const char *)type {
self = [super init];
if (self) {
_number=[[NSNumber alloc] initWithBytes:value objCType:type];
}
return self;
}
+(NSValue *)valueWithBytes:(const void *)value objCType:(const char *)type {
return [[[MultipleNumber alloc] initWithBytes:value objCType:type] autorelease];
}
-(void)getValue:(void *)value { [_number getValue:value]; }
-(const char *)objCType { return [_number objCType]; }
@end
Run Code Online (Sandbox Code Playgroud)
但是当我调用[NSNumber numberWithBool:YES]时,我仍然得到一个_NSCFBoolean类,并且不调用"基本方法".我怎样才能弄清楚哪些方法被认为是原始的?
我正在构建一个自定义键盘,其中有大约50个UIButton键.我想为每个键添加一些分组信息,例如数字,字母,光标等.
首先想到的是tag字段(字母为100,数字为200,等等)
另一种选择是通过具有关联引用的类别.
但是,这两种方法都不是非常友好的Interface Builder.还有其他选择吗?
我在UIViewController中有以下代码 -
[flipButton addTarget:self.navigationController.delegate action:@selector(changeModeAction:) forControlEvents:UIControlEventTouchUpInside];
Run Code Online (Sandbox Code Playgroud)
如您所见,它在其导航控制器委托中调用一个方法.如何正确地将对象传递给此方法?
实际上有两个错误,第一个是:"隐式声明函数"class_getname"在c99中无效"
第二个是:不兼容的整数到指针转换使用类型'int'的表达式初始化'const char*'
我的方法是:
-(void) donneesrecoltees:(NSData *)donnees {
NSError *erreur;
NSNumber *lastMessage,*currentMessage;
//int i;
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
NSString *msg;
UIAlertView *alert;
NSDictionary *json=[NSJSONSerialization JSONObjectWithData:donnees options:0 error:&erreur];
// Check if it's the right class to avoid error stack
// this is the line that is causing the error
const char* className = class_getName([json class]);
NSString *myClass=[NSString stringWithFormat:@"%s",className];
....
}
Run Code Online (Sandbox Code Playgroud)
有关如何解决此问题的任何帮助?谢谢
objective-c ×6
ios ×4
iphone ×4
uibutton ×4
cocoa-touch ×2
uilabel ×2
algorithm ×1
associative ×1
ios4 ×1
ios6 ×1
subclass ×1
xcode6 ×1