나는 절대 초보자 해요, 나는 두 개의 텍스트 필드를 반전 버튼이 필요를 반전 버튼을 설정하는 값을 유지 한 다음 릴리스해야하지만 필자는 값을 쓰는 방법을 잘 모릅니다.방법이 텍스트 필드
답변
이 매우 간단합니다 : 당신은 유지할 수있는 유일한 텍스트 /있는 NSString가에 의해 보류 그만 것입니다 UITextField
그 자체, 즉 name.text
은 surname.text
으로 바뀝니다.
- (IBAction)swapText {
NSString* temp = [name.text retain];
name.text = surname.text;
surname.text = temp;
[temp release];
}
와우, 정말 기꺼이 대답 해 주셔서 감사합니다. 나는 진실로 evryone에게 감사하며, Im은 (는) 당신의 모든 대답을 연구 할 시간을 갖습니다. 첫 번째 견해에서 마지막 대답은 나를위한 좋은 것으로 보인다. – ginofalaci
괜찮습니다. 감사합니다. – ginofalaci
위대한 :)이 솔루션은 당신을 위해 작동하는 경우, 허용 대답 옆에있는 녹색 체크 표시를 체크하여 해결 답변으로 표시하는 것을 잊지 마세요 – AliSoftware
처리해야 할 유일한 개체는 UITextFields를 할당/할당 취소하는 것입니다. 당신의 UITextfields는 인스턴스 변수를하는 가정하면 다음과 같은 코드를 사용할 수 있습니다 (헤더 파일에 선언) :
- (void)viewDidLoad
{
[super viewDidLoad];
CGRect b = [[self view] bounds];
_txt1 = [[UITextField alloc] initWithFrame:CGRectMake(CGRectGetMidX(b)-100, 50, 200, 29)];
[_txt1 setBorderStyle:UITextBorderStyleRoundedRect];
[[self view] addSubview:_txt1];
_txt2 = [[UITextField alloc] initWithFrame:CGRectMake(CGRectGetMidX(b)-100, 100, 200, 29)];
[_txt2 setBorderStyle:UITextBorderStyleRoundedRect];
[[self view] addSubview:_txt2];
UIButton* btnSwap = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btnSwap setFrame:CGRectMake(CGRectGetMidX(b)-75, 150, 150, 44)];
[btnSwap setTitle:@"Swap Text" forState:UIControlStateNormal];
[btnSwap addTarget:self action:@selector(tappedSwapButton) forControlEvents:UIControlEventTouchUpInside];
[[self view] addSubview:btnSwap];
}
- (void)tappedSwapButton
{
NSString* text1 = [_txt1 text];
NSString* text2 = [_txt2 text];
[_txt2 setText:text1];
[_txt1 setText:text2];
}
- (void)dealloc
{
[_txt1 release];
[_txt2 release];
[super dealloc];
}
UIButton은 [UIButton buttonWithType :] 메서드를 사용하고 있습니다. 이것은 UITextFields using 및 alloc/init 메소드와 달리 자동 릴리즈 된 객체입니다. 그러므로 우리가 dealloc 메쏘드에서 UIButton을 dealloc하지 않는 이유 –
'tappedSwapButton'의 코드는 인스턴스 변수'text1'와'text2'가 문자열을 유지하지 못하게하고'[_txt2 setText : text1] ', 이전에 txt2에 있던 문자열 (그리고'text2' 변수를 사용하여 가리키는 문자열)은 누군가에 의해 유지되지 않고 잠재적으로 메모리에서 제거 될 것입니다 ('text2'는 떠돌아 다니는 포인터입니다 - 이후에 삭제 된 메모리로). 운이 좋으면이 방법이 효과가있을 수 있지만 그 동안 메모리가 지워지면 직접 충돌합니다. 스와핑 작업 중 값을 유지해야합니다. – AliSoftware
주어진 코드에 따르면 첫 번째 텍스트 필드의 텍스트가 손실됩니다. 그 문제를 해결하는 가장 쉬운 방법은 name.text에 포함 된 문자열을 보유 할 임시는 NSString 객체를 선언하는 것입니다 : 당신이 점 표기법을 사용하고 있기 때문에
- (IBAction)swapText{
// create a temp string to hold the contents of name.text
NSString *tempString = [NSString stringWithString: name.text];
name.text = surname.text;
surname.text = tempString;
}
, 그것은 가정을 그 "이름"과 "성 "는 바꿀 두 텍스트 필드 모두에 대한 IBOutlet 참조 속성입니다. 이 경우 두 속성 모두를 "보유"하는 한 메모리 관리를 담당합니다 (.m 파일의 dealloc 메서드에서 해제하는 한).
사실이 아닙니다 : UITextField **의 '텍스트'속성은 ** in입니다 "retain"하지만 name.text에 의한 NSString 보류는'name.text = surname.text' (그리고'surname.text'로 대체)를 설정할 때 해제 될 것입니다. 이 단계에서'tempString'에 저장된 원래의'NSString'은 아무에게도 남지 않으므로 잠재적으로 메모리에서 제거됩니다. tempString (지역 변수이고 ** 값을 유지하는 ** 속성이 아닌 **)을 스왑하는 동안 명시 적으로 보유해야하고 나중에 스와핑을 해제해야합니다. (운이 좋으면 운이 좋을 수도 있지만 운에 의지 할 수는 없습니다!) – AliSoftware
autoreleased NSString을 사용하여 name.text에있는 내용을 보관할 수있는 절대적으로 올바른 코드입니다. 코멘트 주셔서 감사합니다! – 5StringRyan
확인. 무의미한 메모리 할당을 피하기 위해 새로운 (autoreleased) NSString을 만드는 대신 명시 적으로 retain + autorelease를 보내는 것이 더 좋습니다.실제로, NSString은 Copy-On-Write를 수행하기 위해 내부적으로 최적화되어 있습니다 (하지만 코드를 작성할 때이를 알고 있어야합니다). 그래서 코코아가 이러한 경우에 최적화되어 있으므로 실제로 할당을 수행하지 않을 것이라고 생각합니다. 그러나 retain + autorelease를 사용하면 새로운 객체로 캡슐화하는 대신 동일한 객체를 작업 할 때보다 의미가 있습니다;) – AliSoftware
- 1. 텍스트 필드
- 2. 텍스트 필드
- 3. PHP 고유 텍스트 필드?
- 4. iPhone 맞춤 텍스트 필드
- 5. NetBeans에서 텍스트 필드 비활성화
- 6. JQuery와 : 텍스트 필드
- 7. 일반 텍스트 onclick - 텍스트 필드
- 8. 텍스트 필드 내의 정적 텍스트?
- 9. 거기에 글꼴 크기를 높이는 텍스트 필드 높이를 높이는 방법이 있습니다
- 10. 아이폰 입력 텍스트 필드
- 11. 양식 필드 텍스트 카운트
- 12. JavaScript로 텍스트 영역에 입력 필드 텍스트 삽입
- 13. MYSQL 텍스트 필드 일치
- 14. 목적 C : 텍스트 필드
- 15. 텍스트 필드 크기 늘리기
- 16. Facebook 텍스트 필드 감지
- 17. 텍스트 필드 길이 제한
- 18. 동적 텍스트 필드
- 19. MySQL의 텍스트 필드 문제
- 20. iPhone 텍스트 필드
- 21. AS3 둥근 텍스트 필드
- 22. Google 인스턴트 텍스트 필드
- 23. 레일에서 배열의 텍스트 필드
- 24. iPad에서 텍스트 필드 애니메이션
- 25. 이미지에 텍스트 필드 추가
- 26. 는 동적 텍스트 필드
- 27. 텍스트 필드 CSS 국경
- 28. JSF 재설정 텍스트 필드
- 29. 자바 패턴 - 텍스트 필드
- 30. BlackBerry 텍스트 필드
우리는 모두 초보자 였고 우리는 여전히 한 과목이나 다른 주제에서 초보자입니다 ... – Coffee