2012-11-27 4 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

추신 : 측면 질문, 어떻게 NSString *var4 = var.var2.var3;

합류 문자가 무엇인가와 같은 문자열을 만들 것인가? JavaScript에서는 이 PHP 인 경우 .

+0

에 계산기 응용 프로그램을 쓸 때 그는 정의 게터를 사용하고 당신이 하나를 쓰고 싶은 이유를 통과 확신 : @ "% @ % @ % @", var, var2, var3];'(당신의 주된 질문에 대해, 나는 당신이 묻고있는 것을 정확하게 얻지 못한다. 귀하의 컨트롤러 ... 확실하지 않습니다.) –

+0

@phillipMills 괜찮아요, XCode 조건으로는 좋지 않아요. 제 첫날 프로그래밍입니다 ... – user115422

+0

이들이 문자열 리터럴이라면, 그것을 'NSString * var4 = @'로 사용할 수 있습니다. "@"text "@"여기 "@"! ", ' – iDev

답변

1

두 가지 방법으로 전역 변수를 사용할 수 있습니다. 먼저 헤더 또는 구현 메소드의 인터페이스 섹션에서 전역 변수 (해당 클래스 내 및 현재 세션에서만 사용 가능)를 설정할 수 있습니다. 다음 예는 다음과 같습니다

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

OR, 아이폰 OS에 당신은 NSUserDefaults라는 스토리지 시스템 기본값를 저장할 수 있습니다. NSUserDefaults를 사용하면 언제든지, 모든 클래스에서, 그리고 모든 응용 프로그램 세션 중에 기본값을 설정하고 액세스 할 수 있습니다. 기본값 인은 앱 번들 내부의 PLIST 파일에 저장됩니다.

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

당신은 또한 NSUserDefaults 방법을 탐구하고 setBool 같은 뭔가를 setObject을 변경 시도 할 수 있습니다 : 여기에 기본을 설정하는 방법은 다음과 같습니다. 기본값 검색은 NSUserDefaults를 정의한 다음 [objectForKey] 메서드를 사용하여 검색하면됩니다. 그저 복사하고 붙여 넣기 할 때 프로그래밍이 재미 있지 않기 때문에 그 부분을 설명하도록하겠습니다.)

행운을 빈다!

+0

이 조금, 조금 늦은 여기 :) 나는 더 설명 할 필요가 있을지도 모른다! 답변을 주셔서 감사합니다. 문제가 해결되면 문제를 표시해주십시오. – user115422

3

아마도 텍스트 입력을 저장하기 위해 @ 속성을 사용하고 싶을 것입니다. 속성은 인스턴스 변수와 비슷하지만, ivars가 검색 (get)되거나 할당 (set) 될 때마다 getter 및 setters를 추가하여 추상화의 또 다른 계층을 도입합니다. 현재 모든 변수는 메소드 내에 만 존재합니다. 속성을 사용하면 이러한 변수에 다른 메서드에서 액세스 할 수 있습니다. 다음은 충돌 과정입니다.

속성은 @interface 섹션에 선언되어 있습니다 (다른 클래스에서 액세스 할 수있는 속성의 헤더 파일을 사용하고 클래스에서 액세스 할 수있는 속성에 대해서는 기본 파일을 사용하십시오). @implementation 섹션에서

@property (strong, nonatomic) NSString *userInput; 

자신의 getter와 setter를 작성해야하거나 자동으로 합성을 사용하여 getter 및 setter를 생성 할 수 있습니다 : 여기에서

@synthesize userInput = _userInput; 

당신이 속성을 사용할 수있게되었습니다.

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

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

속성에 대해 자세히 알고 싶습니다. Apple의 documentation입니다.

속성에 대한 마지막 한 가지 : 인스턴스 변수이므로 클래스 인스턴스에 연결되므로 프로그램 시작 사이에 유지되지 않습니다.

텍스트 입력의 경우 UITextField를 사용해보십시오.

프로그래밍 iOS를 방금 시작한 경우라면 Stanford's CS193p on iTunes U을 권하고 싶습니다. `있는 NSString * var4 = [있는 NSString stringWithFormat : 나는 그가 당신 측 질문에 대해 강의 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. :) 
관련 문제