Если вы запустите сайт на основе контента (например, YouTube), просто напишите небольшой скрипт, который читает вашу базу данных и генерирует XML-файл для каждого URL-адреса.
Поместите его как задание cron после каждого день / неделю. Вы также можете пинговать Google / Yahoo / MSN и т. Д., Когда ваша карта сайта обновляется, чтобы они могли выбрать новую карту сайта и индексировать новые URL.
Попробуйте:
[self.view endEditing:YES];
Вы должны использовать один из этих методов,
[self.view endEditing:YES];
или
[self.textField resignFirstResponder];
проще всего назвать метод
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
if(![txtfld resignFirstResponder])
{
[txtfld resignFirstResponder];
}
else
{
}
[super touchesBegan:touches withEvent:event];
}
Да, endEditing - лучший вариант. А в iOW 7.0 UIScrollView
есть классная функция, позволяющая отключить клавиатуру при взаимодействии с видом прокрутки. Для достижения этого вы можете установить keyboardDismissMode
свойство UIScrollView
.
Установите режим отклонения клавиатуры следующим образом:
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag
Он имеет несколько других типов. Взгляните на этот яблочный документ .
Добавьте к своему представлению A Recognizer Gesture Recognizer. И определите его ibaction
Ваш файл .m будет похож на
- (IBAction)hideKeyboardGesture:(id)sender {
NSArray *windows = [UIApplication sharedApplication].windows;
for(UIWindow *window in windows) [window endEditing:true];
[[UIApplication sharedApplication].keyWindow endEditing:true];
}
Он работает для меня
И быстро мы можем сделать
UIApplication.sharedApplication().sendAction("resignFirstResponder", to: nil, from: nil, forEvent: nil)
Несколько более надежный метод, который мне нужно было использовать недавно:
- (void) dismissKeyboard {
NSArray *windows = [UIApplication sharedApplication].windows;
for(UIWindow *window in windows) [window endEditing:true];
// Or if you're only working with one UIWindow:
[[UIApplication sharedApplication].keyWindow endEditing:true];
}
Я обнаружил, что некоторые другие «глобальные» методы не работают (например, UIWebView
и WKWebView
отказались в отставку).
В Swift 3 вы можете сделать следующее
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
Вы должны отправить endEditing:
в рабочее окно, являющееся подклассом UIView
[[UIApplication sharedApplication].windows.firstObject endEditing:NO];
Даже проще, чем ответ Мигар
перезаписать touchesBegan:withEvent:
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[textField resignFirstResponder];`
}
Это будет dismiss the keyboard
при касании в любом месте в background
.
Это не красиво, но то, как я отказываюсь от firstResponder, когда я не знаю, что это за ответчик:
Создайте UITextField, либо в IB, либо программно. Сделать это скрытым Свяжите это с вашим кодом, если вы сделали это в IB. Затем, когда вы хотите убрать клавиатуру, вы переключаете респондент в невидимое текстовое поле и немедленно отказываетесь от него:
[self.invisibleField becomeFirstResponder];
[self.invisibleField resignFirstResponder];
Здесь слишком много слишком сложных ответов, возможно, потому, что это нелегко найти в документации по iOS. Джозеф H имел это прямо выше:
[[view window] endEditing:YES];
Вам также может потребоваться переопределить UIViewController disablesAutomaticKeyboardDismissal, чтобы в некоторых случаях это работало. Это, возможно, должно быть сделано в UINavigationController, если он у вас есть.
Лучший способ отклонить клавиатуру из UITableView и UIScrollView:
tableView.keyboardDismissMode = UIScrollViewKeyboardDismissModeOnDrag
Вы можете рекурсивно перебирать подпредставления, сохранять массив всех полей UITextFields, а затем перебирать их и оставлять их все.
Не очень хорошее решение, особенно если у вас много подпредставлений, но для простых приложений это должно сработать.
Я решил это гораздо более сложным, но гораздо более производительным способом, но с помощью синглтона / менеджера для механизма анимации моего приложения, и каждый раз, когда текстовое поле становилось отвечающим, я назначал его статическому который будет сметен (подан в отставку) на основании некоторых других событий ... мне почти невозможно объяснить в параграфе.
Будьте изобретательны, мне понадобилось всего 10 минут, чтобы обдумать это для моего приложения после того, как я нашел этот вопрос.
Ответ Джереми для меня не совсем сработал, я думаю, потому что у меня был стек навигации в виде вкладок с модальным диалогом поверх него. Я использую следующее прямо сейчас, и оно работает для меня, но ваш пробег может отличаться.
// dismiss keyboard (mostly macro)
[[UIApplication sharedApplication].delegate dismissKeyboard]; // call this in your to app dismiss the keybaord
// --- dismiss keyboard (in indexAppDelegate.h) (mostly macro)
- (void)dismissKeyboard;
// --- dismiss keyboard (in indexAppDelegate.m) (mostly macro)
// do this from anywhere to dismiss the keybard
- (void)dismissKeyboard { // from: http://stackoverflow.com/questions/741185/easy-way-to-dismiss-keyboard
UITextField *tempTextField = [[UITextField alloc] initWithFrame:CGRectZero];
UIViewController *myRootViewController = <#viewController#>; // for simple apps (INPUT: viewController is whatever your root controller is called. Probably is a way to determine this progragrammatically)
UIViewController *uivc;
if (myRootViewController.navigationController != nil) { // for when there is a nav stack
uivc = myRootViewController.navigationController;
} else {
uivc = myRootViewController;
}
if (uivc.modalViewController != nil) { // for when there is something modal
uivc = uivc.modalViewController;
}
[uivc.view addSubview:tempTextField];
[tempTextField becomeFirstResponder];
[tempTextField resignFirstResponder];
[tempTextField removeFromSuperview];
[tempTextField release];
}
Подклассы ваших текстовых полей ... а также текстовых представлений
В подкласс поместите этот код ..
-(void)conformsToKeyboardDismissNotification{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissKeyBoard) name:KEYBOARD_DISMISS object:nil];
}
-(void)deConformsToKeyboardDismissNotification{
[[NSNotificationCenter defaultCenter] removeObserver:self name:KEYBOARD_DISMISS object:nil];
}
- (void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
[self resignFirstResponder];
}
В делегатах текстового поля (аналогично для делегатов текстового обзора)
-(void)textFieldDidBeginEditing:(JCPTextField *)textField{
[textField conformsToKeyboardDismissNotification];
}
- (void)textFieldDidEndEditing:(JCPTextField *)textField{
[textField deConformsToKeyboardDismissNotification];
}
Все готово. Теперь просто отправьте уведомление из любого места в вашем коде. Он подаст в отставку любую клавиатуру.
Убери это в каком-нибудь служебном классе.
+ (void)dismissKeyboard {
[self globalResignFirstResponder];
}
+ (void) globalResignFirstResponder {
UIWindow * window = [[UIApplication sharedApplication] keyWindow];
for (UIView * view in [window subviews]){
[self globalResignFirstResponderRec:view];
}
}
+ (void) globalResignFirstResponderRec:(UIView*) view {
if ([view respondsToSelector:@selector(resignFirstResponder)]){
[view resignFirstResponder];
}
for (UIView * subview in [view subviews]){
[self globalResignFirstResponderRec:subview];
}
}
Краткий совет о том, как отключить клавиатуру в iOS, когда пользователь касается любого места на экране за пределами UITextField или клавиатуры. Учитывая, сколько недвижимости может занять клавиатура iOS, имеет смысл предложить пользователям простой и интуитивно понятный способ отклонить клавиатуру.
Вот ссылка
Чтобы отклонить клавиатуру после ее появления, есть 2 случая ,
, когда UITextField находится в внутри UIScrollView
, когда UITextField находится вне UIScrollView
2. когда UITextField находится вне UIScrollView, переопределите метод в ваш подкласс UIViewController
вы также должны добавить делегата для всех UITextView
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
чтобы создать IBAction, нажмите Ctrl + клик по UITapGesture и перетащите его в .h файл viewcontroller.
Здесь я назвал tappedEvent своим именем действия
- (IBAction)tappedEvent:(id)sender {
[self.view endEditing:YES]; }
указанная выше информация Информация была получена по следующей ссылке, пожалуйста, обратитесь за дополнительной информацией или свяжитесь со мной, если вы не понимаете данные выше .
http://samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
В заголовочном файле контроллера вашего представления добавьте <UITextFieldDelegate>
к определению интерфейса вашего контроллера, чтобы он соответствовал протоколу делегата UITextField ...
@interface someViewController : UIViewController <UITextFieldDelegate>
... В файле реализации контроллера (.m) добавьте следующий метод или код внутри него, если у вас уже есть метод viewDidLoad ...
- (void)viewDidLoad
{
// Do any additional setup after loading the view, typically from a nib.
self.yourTextBox.delegate = self;
}
... Затем свяжите yourTextBox с вашим фактическим текстовым полем
- (BOOL)textFieldShouldReturn:(UITextField *)theTextField
{
if (theTextField == yourTextBox) {
[theTextField resignFirstResponder];
}
return YES;
}
Вот что я использую в своем коде. Это работает как шарм!
В yourviewcontroller.h добавьте:
@property (nonatomic) UITapGestureRecognizer *tapRecognizer;
Теперь в файле .m добавьте это в функцию ViewDidLoad:
- (void)viewDidLoad {
//Keyboard stuff
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTapAnywhere:)];
tapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapRecognizer];
}
Также добавьте эту функцию в файл .m:
- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
[self.view endEditing:YES];
}
Я ненавижу, что не существует «глобального» способа программно отключить клавиатуру без использования вызовов частного API. Зачастую мне нужно программно отключать клавиатуру, не зная, какой объект является первым респондентом. Я прибег к проверке self
с помощью API-интерфейса Objective-C, перечисляя все его свойства, извлекая свойства типа UITextField
и отправляя им сообщение resignFirstResponder
.
Это не должно быть так сложно сделать ...
Вы можете отправить целевое действие без приложения, оно в любой момент подаст в отставку первому ответчику, не беспокоясь о том, какое представление в настоящее время имеет статус первого ответчика.
Objective-C:
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
Swift 3.0:
UIApplication.shared.sendAction(#selector(resignFirstResponder), to: nil, from: nil, for: nil)
Действия с нулевым таргетингом распространены в Mac OS X для команд меню, и вот их использование в iOS.
@Nicholas Riley & amp; @Kendall Helmstetter Geln & amp; @cannyboy:
Абсолютно великолепно!
Спасибо.
Учитывая ваши советы и советы других в этой теме, вот что я сделал:
Как это выглядит при использовании:
[[self appDelegate] dismissKeyboard];
(примечание: я добавил appDelegate в качестве дополнения к NSObject, чтобы я мог использовать его где угодно и где угодно)
Как это выглядит под капотом:
- (void)dismissKeyboard
{
UITextField *tempTextField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease];
tempTextField.enabled = NO;
[myRootViewController.view addSubview:tempTextField];
[tempTextField becomeFirstResponder];
[tempTextField resignFirstResponder];
[tempTextField removeFromSuperview];
}
РЕДАКТИРОВАТЬ
Поправка к моему ответу включена tempTextField.enabled = NO;
. Отключение текстового поля предотвратит отправку уведомлений клавиатуры UIKeyboardWillShowNotification
и UIKeyboardWillHideNotification
, если вы будете полагаться на эти уведомления во всем приложении.
Это решение убрать клавиатуру при нажатии return
в в любом текстовом поле , добавив код в одном месте (поэтому не нужно добавлять обработчик для каждого текстового поля):
рассмотрим этот сценарий:
у меня есть viewcontroller
с двумя текстовыми полями (имя пользователя и пароль). и viewcontroller
реализует UITextFieldDelegate
протокол
. Я делаю это в viewDidLoad
- (void)viewDidLoad
{
[super viewDidLoad];
username.delegate = self;
password.delegate = self;
}
, а viewcontroller реализует дополнительный метод как
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
и независимо от текстовое поле, в котором вы находитесь, как только я нажму return
на клавиатуре, оно будет отклонено!
В вашем случае то же самое будет работать, если вы установите для всех делегатов текстового поля значение self и реализуете textFieldShouldReturn
Вы можете заставить редактируемый в данный момент вид отказаться от статуса первого респондента с помощью [view endEditing:YES]
. Это скрывает клавиатуру.
В отличие от -[UIResponder resignFirstResponder]
, -[UIView endEditing:]
будет искать в подпредставлениях, чтобы найти текущего первого респондента. Таким образом, вы можете отправить его на верхний уровень представления (например, self.view
в UIViewController
), и он будет делать правильные вещи.
(Этот ответ ранее включал несколько других решений, которые также работали, но были более сложными, чем необходимо. Я удалил их, чтобы избежать путаницы.)
Если честно, я не в восторге от любого из предложенных здесь решений. Я нашел хороший способ использовать TapGestureRecognizer, который, я думаю, доходит до сути вашей проблемы: когда вы нажимаете на что-либо, кроме клавиатуры, отклоняйте клавиатуру.
В viewDidLoad зарегистрируйтесь для получения уведомлений клавиатуры и создайте UITapGestureRecognizer:
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(keyboardWillShow:) name:
UIKeyboardWillShowNotification object:nil];
[nc addObserver:self selector:@selector(keyboardWillHide:) name:
UIKeyboardWillHideNotification object:nil];
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(didTapAnywhere:)];
Добавьте отображение клавиатуры / скрыть респонденты. Там вы добавляете и удаляете TapGestureRecognizer в UIView, который должен отпускать клавиатуру при нажатии. Примечание. Нет необходимости добавлять его во все подэлементы или элементы управления.
-(void) keyboardWillShow:(NSNotification *) note {
[self.view addGestureRecognizer:tapRecognizer];
}
-(void) keyboardWillHide:(NSNotification *) note
{
[self.view removeGestureRecognizer:tapRecognizer];
}
TapGestureRecognizer вызовет вашу функцию, когда он нажмет, и вы можете отклонить клавиатуру следующим образом:
-(void)didTapAnywhere: (UITapGestureRecognizer*) recognizer {
[textField resignFirstResponder];
}
Хорошая вещь о том, что это решение состоит в том, что оно фильтрует только для отводов, а не для считывания. Поэтому, если у вас есть прокрутка контента над клавиатурой, пролистывание все равно будет прокручиваться и клавиатура будет отображаться. Удалив распознаватель жестов после того, как клавиатура исчезнет, будущие касания на вашем экране обрабатываются нормально.
Лучшим подходом является «украсть» статус первого респондента.
Поскольку UIApplication является подклассом UIResponder, вы можете попробовать:
[[UIApplication sharedApplication] becomeFirstResponder]
[[UIApplication sharedApplication] resignFirstResponder]
Если это не удастся, создать новый UITextField с фреймом нулевого размера, добавить его в какое-либо представление и сделать нечто подобное в отставку).