0

我正在尝试制作一个测试应用程序,当用户单击一个按钮时,文本会切换到其他内容,如果再次单击它,它会返回,但我也希望能够添加一个用户输入他/她的名字是这样说的,隐藏的信息是:或者其他什么......

我的代码是:

- (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.
}

我希望这不会被认为过于本地化!

穆克曼

PS:一个附带问题,我将如何创建一个字符串,例如NSString *var4 = var.var2.var3;

什么是加入字符?在 JavaScript 中是+在 PHP 中.

4

3 回答 3

3

您可能想使用 @property 来存储文本输入。属性类似于实例变量,但它们通过添加在检索 (get) 或分配 (set) ivars 时检索的 getter 和 setter 来引入另一层抽象。目前,您的所有变量仅存在于您的方法中。属性将允许从不同的方法访问这些变量。这是一个速成课程:

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

    @property (strong, nonatomic) NSString *userInput;

@implementation必须编写自己的 getter 和 setter 部分中,或者您可以使用 synthesize 自动创建您的 getter 和 setter:

    @synthesize userInput = _userInput;

从这里您可以使用该物业。

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

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

我想了解有关属性的所有信息,这是 Apple 的文档

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

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

如果您刚开始编写 iOS 程序,我建议您在 iTunes U 上使用斯坦福的 CS193p。我很确定他使用了一个自定义 getter,并且在他在第 2 课中编写计算器应用程序时,他解释了您想要编写一个 getter 的原因。

于 2012-11-27T03:41:59.670 回答
1

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

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

或者,在 iOS 中,您可以使用名为NSUserDefaults的存储系统存储默认值。NSUserDefaults 允许您在任何时间、任何课程以及任何应用会话期间设置和访问默认值。默认值存储在应用程序包内的 PLIST 文件中。以下是设置默认值的方法:

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

您还可以探索 NSUserDefaults 方法并尝试更改setObjectsetBool. 检索默认值非常相似——只需定义 NSUserDefaults,并使用该[objectForKey]方法检索它。我会让你弄清楚那部分,因为当你只是复制和粘贴时编程并不有趣;)

祝你好运!

于 2012-11-27T02:27:48.727 回答
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. :)
于 2012-11-27T04:46:35.457 回答