我有点困惑,今天发现以下在尝试更改显示的文本时不起作用UIButton.
// 001
[[[self button] titleLabel] setText:@"Peanuts"];
Run Code Online (Sandbox Code Playgroud)
我想我知道为什么,但我只是想在这里证实我的想法.001确实设置了titleLabel文本属性,但作为其a UILabel(子视图UIButton),它不会导致重绘UI.这导致UILabel文本属性的内部更改,但遗憾的是UI中没有可视更改.
// 002
[[self button]setTitle:@"Peanuts" forState:UIControlStateNormal];
Run Code Online (Sandbox Code Playgroud)
似乎方法setTitle:forState是正确的方法,它有额外的开销需要一个状态但是会调用一个UI重绘,因为它直接被调用UIButton.我的问题是,002是正确的方法,这似乎是除非我做错了什么?
我正在寻找一种方法,使句子中的第一个单词的颜色与句子其余部分的颜色不同.METHOD_001首先将整个字符串着色为白色,然后将前8个字符重新着色为红色.METHOD_002将前8个字符设置为红色,然后使用字符串长度计算剩余字符并将其着色为白色.
METHOD_001绝对是最好的,但我很好奇,如果有一个更简单的方法,我期望找到一个NSMutableAttributedString addAttribute:没有范围,只是将属性应用于整个字符串,似乎有点疏忽所有修改a NSMutableAttributedString要求你指定一个范围,我错过了什么吗?
注意: 代码包含硬编码值以帮助提高可读性.
// METHOD_001
NSMutableAttributedString *attrString_001 = [[NSMutableAttributedString alloc] initWithString:@"Distance 1720 mm" attributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]}];
[attrString_001 addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 8)];
[[self nameLabel] setAttributedText:attrString_001];
// METHOD_002
NSString *string = @"Distance 1720 mm";
NSUInteger stringLength = [string length];
NSMutableAttributedString *attrString_002 = [[NSMutableAttributedString alloc] initWithString:string];
[attrString_002 addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:NSMakeRange(0, 8)];
[attrString_002 addAttribute:NSForegroundColorAttributeName value:[UIColor whiteColor] range:NSMakeRange(9, (stringLength-9))];
[[self distanceLabel] setAttributedText:attrString_002];
Run Code Online (Sandbox Code Playgroud) 我刚刚完成了在iPhone5/5S(1136*640)上开发和测试的SpriteKit游戏,游戏在两台设备上以60fps运行.我还写了一个支持iPhone4/4S(960*640)的版本,因为我在较慢的iPhone 4上进行了测试,但是这个版本在20fps时遇到困难,即使我正在预加载我的所有资产,也可能在初始加载时滞后/跳跃.
我目前的理解是我需要提交两个版本,但可以在描述中指定"此应用程序需要iPhone 5或更高版本".
我的问题是:我可以将应用程序限制在iPhone5/5S上,我当时认为可能有"必需的设备功能",例如"Requires_Advanced_Processor"或我可以设置的东西.在没有完全缩减版本的情况下,游戏能够在较旧的硬件上提供良好的体验,我只是意识到发布iPhone 4/4S版本可能会诱使一些人下载它并且有一个不太理想的体验,有什么在提交应用程序时,除了在我的描述中添加上述注释之外我可以做什么?
无论如何在不使用alloc和后续版本的情况下将int(或float)数字转换为NSString对象?
int myInt = 25;
NSString *myString = [[NSString alloc] initWithFormat:@"%d",myInt];
...
[myString release];
Run Code Online (Sandbox Code Playgroud)
编辑:
感谢您的回答,我应该在问题中更清楚一点,我特别感兴趣在iPhone上使用它.正如@chuck所说,我可以使用一种方便的方法,但我的印象是我应该尽可能避免这些因为内存/性能原因而在iPhone上使用.我可能错了.
加里
鉴于下面的属性声明,方法(A)的工作方式与方法(B)完全相同吗?我只想检查self.yellowViewController = yellcon_New;是通过我的setter进行的,以便释放旧对象并保留新对象.
// INTERFACE
@property(nonatomic, retain) YellowViewController *yellowViewController;
// IMPLEMENTATION (A)
self.yellowViewController = yellcon_New;
// IMPLEMENTATION (B)
[self setYellowViewController:yellcon_New];
Run Code Online (Sandbox Code Playgroud) 我从2010年1月开始在线观看斯坦福iPhone的讲座,我注意到Apple的那个人一直指的是使用"className"获取对象类名,例如
NSArray *myArray = [NSArray arrayWithObjects:@"ONE", @"TWO", nil];
NSLog(@"I am an %@ and have %d items", [myArray className], [myArray count]);
Run Code Online (Sandbox Code Playgroud)
但是,我无法让这个工作,最接近我可以用它来使用类,className错了,它被删除了,只是好奇吗?
NSArray *myArray = [NSArray arrayWithObjects:@"ONE", @"TWO", nil];
NSLog(@"I am an %@ and have %d items", [myArray class], [myArray count]);
Run Code Online (Sandbox Code Playgroud)
加里
有人会这么好心以确认我正确理解了这一点。我对此的最初反应是 mutableArray 在分配给 immutableArray 时会变成 immutableArray,但事实并非如此。
这是因为初始数组被分配为一个 mutableArray 而 immutableArray 只是被分配为指向同一个对象。编译器发出警告,但代码在运行时执行得很好。
NSMutableArray *mArray = [NSMutableArray arrayWithObjects:@"Teddy", @"Dog", nil];
NSArray *iArray = mArray;
[iArray addObject:@"Snoss"]; // Normally this would crash NSArray
Run Code Online (Sandbox Code Playgroud)
非常感激
加里。
我已经设置了一个带有两个独立 UIViewController 的 UITabBarController。在第二个 UIViewController 的初始化中,我设置了 UITabBarItem 以便它正确显示选项卡:
UITabBarItem *tabBar = [self tabBarItem];
[tabBar setTitle:@"DATA"];
[tabBar setImage:[UIImage imageNamed:@"DATA.png"]];
Run Code Online (Sandbox Code Playgroud)
这工作正常,选项卡显示标题“数据”并显示正确的图标图像。在 loadView 内的同一个控制器中,我正在设置 UIViewController 标题:
[self setTitle:@"Data Table"];
Run Code Online (Sandbox Code Playgroud)
我的问题是当我运行应用程序时,我的第二个选项卡读取“DATA”但是当我单击选项卡并调用 loadView 时(我在那里有一个 UITableView)并且我将 UNViewControllers 标题属性设置为“数据表”我的第二个选项卡更改为读取“数据表”。有没有办法解决/避免这种情况?
我有点好奇在以下情况下会发生什么.您在使用iOS4的iTunes商店(有客户)上有现有的应用程序,然后您发布使用较新iOS的应用程序的更新.
快速问题,我有一个月份的名单,即"Jan""Feb""Mar""Apr"......等我想转换成1,2,3,4 ...等我写的一些简单的代码可以做到这一点,但只是好奇,如果有人知道使用任何API这样做的方法.
iphone ×8
objective-c ×8
cocoa-touch ×6
cocoa ×1
frame-rate ×1
ios ×1
sprite-kit ×1
syntax ×1
uibutton ×1
uicolor ×1
uilabel ×1