2012-11-27 26 views
0

我试图做一个测试应用程序,当用户点击一个按钮,文本将被切换到别的东西,如果它再次点击,它会回来,但我也希望能够加入其中,用户所以说进入他/她的名节,隐藏的信息是:或任何...的iOS采取用户输入,并将它保存为一个全局变量

我的代码是:

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
//button.backgroundColor = [UIColor redColor]; 
button.titleLabel.textColor=[UIColor blackColor]; 
button.frame = CGRectMake(25, 100, 275, 60); 
[button setTitle:@"Press this button to reveal the text!" forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(button_method:) forControlEvents:UIControlEventTouchUpInside]; 
[self.view addSubview:button]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)button_method:(UIButton *)button { 
NSString *test = @"I am learning Objective-C for the very first time! Also, this is my first ever variable!"; 
// handle button press 
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(25, 25, 275, 60)]; 
label.text = test; 
label.numberOfLines = 0; 
label.lineBreakMode = UILineBreakModeWordWrap; 
//label.lineBreakMode = NSLineBreakByWordWrapping; //iOS 6 only 
[self.view addSubview:label]; 
[button setTitle:@"You have pressed the button!" forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(change_again:) forControlEvents:UIControlEventTouchUpInside]; 
} 

- (void)change_again:(UIButton *)button { 
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(25, 25, 275, 60)]; 
label.text = @"You have found the next piece of text!"; 
label.numberOfLines = 0; 
label.lineBreakMode = UILineBreakModeWordWrap; 
//label.lineBreakMode = NSLineBreakByWordWrapping; //iOS 6 only 
[self.view addSubview:label]; 
[button setTitle:@"Keep pressing!" forState:UIControlStateNormal]; 
[button addTarget:self action:@selector(button_method:) forControlEvents:UIControlEventTouchUpInside]; 

} 

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

希望这不被认为是太本地化!

muqman

PS:A面的问题,我将如何创建这样一个字符串作为NSString *var4 = var.var2.var3;

什么是连接字符?在JavaScript它+在PHP它.

+0

写了一个计算器应用程序对于你身边的问题:'的NSString * VAR4 = [NSString的stringWithFormat :@“%@%@%@”,var,var2,var3];'(对于你的主要问题,我不明白你在问什么,你说的是“全局”,但你可能只需要一个属性你的控制器......不知道。) –

+0

@phillipMills好吧,即时消息不太好用XCode条款,这是我的第一天编程... – user115422

+0

如果这些是字符串文字,你可以使用它作为'NSString * var4 = @“一些“@”text“@”here“@”!“;' – iDev

回答

1

有使用全局变量的方法有两种。首先,您可以在头文件或实现方法的接口部分中设置全局变量(仅在该类中以及在当前会话期间可用)。这里有一个例子:

// ViewController.m 
#import "ViewController.h" 
@interface ViewController() 
{ 
    NSString *nameOfGlobalVariable; 
} 
@end 

OR,iOS中可以存储默认一个名为NSUserDefaults的存储系统。 NSUserDefaults允许您在任何时间,任何课程以及任何应用程序会话期间设置和访问默认值。该默认存储在plist文件中的应用程序的包中。以下是如何设置默认:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
[defaults setObject:@"YourText" forKey:@"NameOfDefault"]; 
[defaults synchronize]; 

您还可以探索方法NSUserDefaults的,并尝试进行类似setBool变幻出setObject。检索默认是非常similar-只需定义NSUserDefaults的,并使用[objectForKey]方法来检索它。我将离开你推测的那部分,因为编程是不好玩,当你只是复制和粘贴;)

祝你好运!

+0

生病回来这一点,它在这里晚了:)我可能需要更多的解释!谢谢你的回答,如果它解决了我的问题,那就不好说了。 – user115422

3

你可能想使用@property存储文本输入。属性就像实例变量,但它们通过添加获取器和设置器来引入另一层抽象,只要检索(获取)或分配(设置)ivars即可检索。目前所有的变量只存在于你的方法中。一个属性将允许从不同的方法访问这些变量。这里是一个速成课程:

@interface部分声明了一个属性(使用头文件中的属性可以从其他类访问,使用主文件的属性只能从您的类访问)。

@property (strong, nonatomic) NSString *userInput; 

@implementation部分必须编写自己的getter和setter,也可以自动创建使用合成你的getter和setter方法:

@synthesize userInput = _userInput; 

从这里你能够使用属性。

//Assigning the property 
    self.userInput = @"Some text"; 

    //Retrieving the property 
    label.text = self.userInput; 

我要了解所有特性,这里是苹果公司的documentation

有关属性的最后一件事:由于它们是实例变量,因此它们与类的实例绑定,因此它们不会在启动程序之间持续存在。

对于文本输入,请尝试使用UITextField。

如果你刚开始编程iOS,我会推荐Stanford's CS193p on iTunes U。我敢肯定,他用的是自定义的getter和通过,你会想要写一个理由去时,他在演讲2.

+0

我将如何获得用户输入? – user115422

+0

我的意思是我将如何要求按钮设置文本字段的值的变量? – user115422

+0

在按钮的回调方法(button_method:或change_again :)中,您应该能够使用UITextField的“text”属性从UITextField中获取文本。有关更多信息,请参阅[类参考](http://developer.apple.com/library/ios/#documentation/uikit/reference/UITextField_Class/Reference/UITextField.html)。 –

0
Just try something like that:- 

// In .h file, define your enum... 
enum 
{ 
MDefaultButtonText = 1, 
MToggleButtonText 
}; 

// In .m file, define your string if the text not changed... 
#ifndef MDefaultButtonTextString 
#define MDefaultButtonTextString "This is default string" 
#endif 

#ifndef MToggleButtonTextString 
#define MToggleButtonTextString "This is toggled string" 
#endif 

/* 
Please note, you can also used:- 
const NSString *testStr = @"your required string"; 
// Feel free if you think to know more... 
*/ 

Now, in viewDidLoad:- 
[yourButton setTag:1]; 
[yourButton addTarget:self action:@selector(someProcedure:) forControlEvents:UIControlEventTouchUpInside]; 

Now, you do need of implementing your click event... 
-(void)someProcedure:(id)sender 
{ 
// Do your stuff here... 

switch([sender tag]) 
{ 
case MDefaultButtonText://sender.tag = 1 
    [sender setTag:2]; 
    [sender setTitle:MToggleButtonTextString forState:UIControlStateNormal]; 
    // In alert set Message to = MDefaultButtonTextString 
    break; 
case MToggleButtonText:////sender.tag = 2 
    [sender setTag:1]; 
    [sender setTitle:MDefaultButtonTextString forState:UIControlStateNormal]; 
    // In alert set Message to = MToggleButtonTextString 
    break; 
default: 
    //if you required... 
    break; 
} 
} 

Please cross check the required message accordingly to your requirement.Hope, it'll sort your issue. 

Any concern, just get back to me. :) 
相关问题