Mac, iOS, Xcode 및 objective-c를 처음 사용합니다. 저는 Windows 세계 (.net, C#, Silverlight 등)에 매우 익숙합니다. 그러나 그 중 아무 것도 Mac에서 여기에서하는 일에 실제로 적용되지 않습니다.iOS 키보드 반송 처리기
간단히 말해서 포인터와 코드 검토를 통해 나를 도울 수 있기를 바랍니다. 웹에 많은 기사가 있습니다 (스택 오버플로에있는 기사가 많음). 어떻게하면 일을하는지에 대한 모든 의견을 쉽게 잃어 버릴 수 있습니다.
iOS 키보드를 Next 및 Done에 반응시키고 키보드 위에 툴바를 표시하고 키보드를위한 공간을 허용하기 위해 텍스트 필드를 이동시키는 등의 간단한 작업을하기로 결정했습니다. 여기에있는 첫 번째 샘플은 간단한 하나, 세 개의 텍스트 필드, 두 개는 Next, 두 번째는 Done으로 키보드를 닫습니다.
나는 헤더 파일에 각각의 텍스트 필드에 UITextFieldDelegate과 함께 IBOutlet을 추가했다. 또한 텍스트 필드를 IBOutlet에 Ctrl 키를 누른 상태에서 드래그하여 연결했습니다. 내가 텍스트 필드에 대한 합성 문, 플래그에 viewDidUnload (자동 메모리 릴리스 모드를 사용하여) 릴리스에 대한 메모리에 전무로 세트를 추가 한 소스 파일에서#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField* firstNameTextField;
@property (weak, nonatomic) IBOutlet UITextField* lastNameTextField;
@property (weak, nonatomic) IBOutlet UITextField* cityTextField;
@end
과 초점을 설정하는 textFieldShouldReturn 방법 텍스트 필드에.
#import "ViewController.h"
@implementation ViewController
@synthesize firstNameTextField = _firstNameTextField;
@synthesize lastNameTextField = _lastNameTextField;
@synthesize cityTextField = _cityTextField;
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)viewDidUnload
{
[self setFirstNameTextField:nil];
[self setLastNameTextField:nil];
[self setCityTextField:nil];
[super viewDidUnload];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}
- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField
{
if (theTextField == self.firstNameTextField)
{
[self.lastNameTextField becomeFirstResponder];
}
else if (theTextField == self.lastNameTextField)
{
[self.cityTextField becomeFirstResponder];
}
else
{
[theTextField resignFirstResponder];
}
return YES;
}
@end
이렇게하는 방법은 무엇입니까?
객관적인 관점에서 볼 때 * (포인터 용)를 유형 또는 이름 앞에 넣으시겠습니까? 메모리 관리는 올바른
@property (weak, nonatomic) IBOutlet UITextField* firstNameTextField;
대
@property (weak, nonatomic) IBOutlet UITextField *firstNameTextField;
인가? 기억이 올바르게 풀려나고, 살아 남을 것입니까?
감사합니다.
좋습니다. 나는 애플 웹 사이트에있는 예제 중 하나에서 약한 키워드를 얻었지만, 어느 것을 사용해야할지 확실하지 않았다. 따라서 실제 TextField 컨트롤은 스토리 보드에 있으며 UI를 통해 속성에 연결되지만 ViewController 지속 기간 동안 변수가 지속됩니다. 충분히 공정한 것 같습니다. –
변경 사항을 적용하고 다시 실행합니다. 애플의 세계에서 애플 리케이션이 메모리 누수없이 올바르게 닫혔는지 확인하기 위해 어떤 툴을 사용해야하는지 알아 내야한다. –