#objective-c #cocoa-touch #uitextfield
#objective-c #cocoa-touch #uitextfield
Вопрос:
Я использую это, чтобы скрыть клавиатуру при нажатии кнопки «Готово» или за пределами текстового поля:
в представлении загружалось:
PidField.returnKeyType = UIReturnKeyDone;
PidField.delegate = self;
HesloField.returnKeyType = UIReturnKeyDone;
HesloField.delegate = self;
затем в программе:
-(BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == PidField) {
[PidField resignFirstResponder];
}
if (theTextField == HesloField) {
[HesloField resignFirstResponder];
}
return YES;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
[PidField resignFirstResponder];
[HesloField resignFirstResponder];
}
Это хороший и проверенный код, я использовал его много раз, но теперь, когда я ввожу текстовое поле, это приводит к сбою моего приложения. я не понимаю, почему или где я должен найти ошибку
Спасибо
//
// InfoViewController.m
// PhotoScroller
//
// Created by Csaba on 3/29/11.
// Copyright 2011 __MyCompanyName__. All rights reserved.
//
#import "InfoViewController.h"
@implementation InfoViewController
@synthesize PidField8, HesloField8;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)dealloc
{
[super dealloc];
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[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 from its nib.
self.view.backgroundColor = [UIColor colorWithRed:205/255.0 green:234/255.0 blue:242/255.0 alpha:1];
PidField8.returnKeyType = UIReturnKeyDone;
PidField8.delegate = self;
HesloField8.returnKeyType = UIReturnKeyDone;
HesloField8.delegate = self;
}
-(BOOL)textFieldShouldReturn:(UITextField *)theTextField {
if (theTextField == PidField8) {
[PidField8 resignFirstResponder];
}
if (theTextField == HesloField8) {
[HesloField8 resignFirstResponder];
}
return YES;
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
[PidField8 resignFirstResponder];
[HesloField8 resignFirstResponder];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
@end
Комментарии:
1. когда я закомментирую эту строку //HesloField. делегировать = self; тогда оно не падает, но и не скрывает клавиатуру
2. Запустите в режиме отладки и посмотрите, где происходит сбой и с каким сообщением. Также, пожалуйста, применяйте соглашения об именовании, такие как ivar, начинающиеся со строчных букв. Это больно читать и понимать.
3. сначала я его отлаживаю, но не могу найти, куда оно попадает. сначала я отлаживаю, а потом спрашиваю … 🙂
Ответ №1:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
удалите это и попробуйте…
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
[PidField resignFirstResponder];
[HesloField resignFirstResponder];
}
и в файл .h записать делегат
UITextViewDelegate
Комментарии:
1. все то же самое, это не помогает
2. сделайте одну вещь.. Скопируйте и вставьте сюда весь файл вашего класса… позвольте мне посмотреть .. вы делаете еще одну ошибку..
3. ничего плохого в .m check ur nib .. когда вы получаете сбой exatly?
4. когда я нажимаю, чтобы ввести текстовое поле
5. UITextViewDelegate или UITextFieldDelegate?