UITextField 和有趣的程序
Posted
技术标签:
【中文标题】UITextField 和有趣的程序【英文标题】:UITextField and interesting program 【发布时间】:2012-01-02 15:25:44 【问题描述】:首先,对不起我的英语……我想写一个程序来计算两个城市之间的距离。例如,在 UITextField 我们写巴黎,在第二个 UITextField 我们写第二个,“伦敦。我们有一个所有城市的经度和纬度的基数。我们的程序有使用这四个数字的距离公式。我们知道这个公式。
当用户在 UITextField 中插入名称时,我想使用此 .text 并将其与我们的基础进行比较。怎么做??我可以做一个这样的程序,但它是......愚蠢的:
@interface City : UIViewController
IBOutlet UITextField *city1;
IBOutlet UITextField *city2;
@property (nonatomic, retain) IBOutlet UITextField *city1;
@property (nonatomic, retain) IBOutlet UITextField *city2;
-(void) calculate;
@end
#import "City.h"
@implementation City
@synthesize city1, city2;
-(void) viewDidLoad
// to check changes in textfields i`m using NSTimer, I know it`s stupid but I haven`t learned how to make it in different way
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(calculate) userInfo:nil repeats:YES];
-(void) obliczenia
double distance;
if([city1 is EqualToString:@"Paris"] && [city2 is EqualToString:@"London"])
double Paris_lat = x1;
double Paris_lon = y1;
double London_lat = x2;
double London_lon = y2;
distance =...; // we know the formula for distance but this is not important for now.
// distance shows in some label but this is not a point of my problem.
它运行,但是当我们的城市很少时。但是当我们有上千个城市时,写代码就不是废话了。
我从 iPhone 编程开始。 谢谢你的耐心,请帮助我。这很重要,但我找不到解决方案。
【问题讨论】:
***.com/a/388584/413443 这是监听文本字段更改的更好方法。 【参考方案1】:看看这个指南: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/PropertyLists/AboutPropertyLists/AboutPropertyLists.html
基本上,将所有数据放入属性列表中,如下所示:
<dict>
<key>Paris</key>
<dict>
<key>x</key>
<real>20.2</real>
<key>y</key>
<real>30.4</real>
</dict>
...
</dict>
然后像这样加载它:
NSDictionary * data = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NAMEOFPLIST" ofType:@"plist"]];
NSDictionary * paris = [data objectForKey:@"Paris"];
float xparis = [[paris objectForKey:@"x"] floatValue];
float yparis = [[paris objectForKey:@"y"] floatValue];
在你的情况下,你会做这样的事情:
NSDictionary * data = [[NSDictionary alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"NAMEOFPLIST" ofType:@"plist"]];
NSDictionary * city1Data = [data objectForKey:city1.text];
NSDictionary * city2Data = [data objectForKey:city2.text];
if (city1Data != nil && city2Data != nil)
// Do what you need...
然后对数据做你需要的事情。
【讨论】:
谢谢菲利普!我认为这个解决方案是我需要的。我试过这个并且(我也试图理解关于 plist 的一切)(可能)我们不能使用m right,aren
t 我?而且我们也不能使用:double xparis = [paris objectForKey:@"x"];但是浮动 xparis - [[paris objectForKey:@"x"] floatValue];您最好使用选择器视图来显示可用城市,或者使用文本视图中的实时搜索来自动完成,或者为您的城市提供选择。
如果您有一组受限制的输入(在这种情况下,是您拥有 long、lat 值的城市名称),最好将用户的输入限制为这些值。
【讨论】:
我同意这也是一个更好的界面。 谢谢!是的,在这种情况下,文本字段将是更好的解决方案。【参考方案3】:您可以创建一个包含所有国家/地区名称的数组,并将数组中的每个国家/地区名称与您的输入进行比较。
NSArray *countries = [NSArray arrayWithObjects:@"Berlin", @"Rom", nil];
for (NSString *c in countries)
if ([city1 isEqualToString:c])
//do something
【讨论】:
这没有用,因为它实际上没有与名称相关联的数据。 是的,所以最好的技巧是来自@PhilippeSabourin 的解决方案 我认为这就是评论://do something
的用途。人们可以自己填空。以上是关于UITextField 和有趣的程序的主要内容,如果未能解决你的问题,请参考以下文章