Ik heb programmatisch een UITextField
gemaakt, waardoor het UITextField
een eigenschap is van de viewController. Ik moet het toetsenbord sluiten met de terugkeer en de aanraking op het scherm. Ik kon het scherm aanraken om te verwijderen, maar op Return drukken werkt niet.
Ik heb gezien hoe ik dit moet doen met storyboards en door het UITextField
-object rechtstreeks toe te wijzen en te initialiseren zonder het als een eigenschap te maken. Mogelijk om te doen?
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, atomic) UITextField *username;
@end
.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blueColor];
self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
self.username.placeholder = @"Enter your username";
self.username.backgroundColor = [UIColor whiteColor];
self.username.borderStyle = UITextBorderStyleRoundedRect;
if (self.username.placeholder != nil) {
self.username.clearsOnBeginEditing = NO;
}
_username.delegate = self;
[self.view addSubview:self.username];
[_username resignFirstResponder];
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
NSLog(@"touchesBegan:withEvent:");
[self.view endEditing:YES];
[super touchesBegan:touches withEvent:event];
}
@end
Antwoord 1, autoriteit 100%
De eenvoudige manier is om de gemachtigde van UITextField
te verbinden met zichzelf (self.mytestField.delegate = self
) en het toetsenbord te sluiten in de methode textFieldShouldReturn
met behulp van [textField resignFirstResponder];
Een andere manier om het toetsenbord te sluiten is de volgende:
Doelstelling-C
[self.view endEditing:YES];
Snel:
self.view.endEditing(true)
Zet [self.view endEditing:YES];
waar u het toetsenbord wilt sluiten (knopgebeurtenis, aanraakgebeurtenis, enz.).
Antwoord 2, autoriteit 11%
Voeg een gedelegeerde methode van UITextField
als volgt toe:
@interface MyController : UIViewController <UITextFieldDelegate>
En stel uw textField.delegate = self;
in en voeg dan ook twee gedelegeerde methoden toe van UITextField
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
// It is important for you to hide the keyboard
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Antwoord 3, autoriteit 10%
gebruik dit gewoon in swift om het toetsenbord te sluiten:
UIApplication.sharedApplication().sendAction("resignFirstResponder", to:nil, from:nil, forEvent:nil)
Swift 3
UIApplication.shared.sendAction(#selector(UIResponder.resignFirstResponder), to: nil, from: nil, for: nil)
Antwoord 4, autoriteit 9%
//Toetsenbord verbergen door achtergrond in beeld aan te raken
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[[self view] endEditing:YES];
}
Antwoord 5, autoriteit 7%
SWIFT 4:
self.view.endEditing(true)
of
Stel de gemachtigde van het tekstveld in op de huidige viewcontroller en dan:
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
textField.resignFirstResponder()
return true
}
Doelstelling-C:
[self.view endEditing:YES];
of
Stel de gemachtigde van het tekstveld in op de huidige viewcontroller en dan:
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Antwoord 6, autoriteit 3%
In de App Delegate kunt u schrijven
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.window endEditing:YES];
}
gebruik deze manier, je kunt niet te veel code schrijven.
Antwoord 7, autoriteit 2%
Probeer een idee te krijgen van wat een eerstehulpverlener is in de iOS-weergavehiërarchie. Wanneer uw tekstveld actief wordt (of eerstehulpverlener) wanneer u erin tikt (of het de boodschap becomeFirstResponder
programmatisch doorgeeft), presenteert het het toetsenbord. Dus om te voorkomen dat uw tekstveld de eerste responder is, moet u het bericht resignFirstResponder
daar naartoe sturen.
[textField resignFirstResponder];
En om het toetsenbord op de return-knop te verbergen, moet u de gedelegeerde methode textFieldShouldReturn:
implementeren en het bericht resignFirstResponder
doorgeven.
- (BOOL)textFieldShouldReturn:(UITextField *)textField{
[textField resignFirstResponder];
return YES;
}
Antwoord 8, autoriteit 2%
Dit is wat ik in mijn code gebruik. Het werkt als een tierelier!
Voeg in yourviewcontroller.h toe:
@property (nonatomic) UITapGestureRecognizer *tapRecognizer;
Voeg nu in het .m-bestand dit toe aan uw ViewDidLoad-functie:
- (void)viewDidLoad {
[super viewDidLoad];
//Keyboard stuff
tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
tapRecognizer.cancelsTouchesInView = NO;
[self.view addGestureRecognizer:tapRecognizer];
}
Voeg ook deze functie toe aan het .m-bestand:
- (void)handleSingleTap:(UITapGestureRecognizer *) sender
{
[self.view endEditing:YES];
}
Antwoord 9, autoriteit 2%
Voor een groep UITextView
‘s in een ViewController
:
Swift 3.0
for view in view.subviews {
if view is UITextField {
view.resignFirstResponder()
}
}
Doelstelling-C
// hide keyboard before dismiss
for (UIView *view in [self.view subviews]) {
if ([view isKindOfClass:[UITextField class]]) {
// no need to cast
[view resignFirstResponder];
}
}
Antwoord 10
Om een toetsenbord te sluiten nadat het toetsenbord is verschenen, zijn er 2 gevallen,
-
wanneer het UITextField zich in een UIScrollView
-
wanneer het UITextField buiten een UIScrollView
bevindt
is
2.wanneer het UITextField zich buiten een UIScrollView bevindt
overschrijf de methode in uw UIViewController-subklasse
je moet ook gedelegeerde toevoegen voor alle UITextView
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.view endEditing:YES];
}
- In een scrollweergave zal buiten tikken geen enkele gebeurtenis activeren, dus gebruik in dat geval een tikgebaarherkenning,
Sleep een UITapGesturevoor de scroll-weergave en maak er een IBA-actie voor.
om een IBA-actie te maken, drukt u op ctrl+ klik op de UITapGesture en sleept u deze naar het .h-bestand van de viewcontroller.
Hier heb ik tappedEvent genoemd als mijn actienaam
- (IBAction)tappedEvent:(id)sender {
[self.view endEditing:YES]; }
de bovenstaande informatie is afgeleid van de volgende link. Raadpleeg voor meer informatie of neem contact met mij op als u de bovenstaande gegevens niet begrijpt.
http:/ /samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
Antwoord 11
Ik weet dat dit door anderen is beantwoord, maar ik vond een ander artikel dat ook geen achtergrondgebeurtenis behandelde – tableview of scrollview.
http:/ /samwize.com/2014/03/27/dismiss-keyboard-when-tap-outside-a-uitextfield-slash-uitextview/
Antwoord 12
Aangezien de tags alleen iOS zeggen, zal ik het antwoord voor Swift 1.2 en iOs 8.4 plaatsen, voeg deze toe aan je snelle klasse van viewcontroller:
// MARK: - Close keyboard when touching somewhere else
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
self.view.endEditing(true)
}
// MARK: - Close keyboard when return pressed
func textFieldShouldReturn(textField: UITextField!) -> Bool {
textField.resignFirstResponder()
return true
}
// MARK: -
Vergeet ook niet om UITextFieldDelegate toe te voegen aan de klassendeclaratie en zet je tekstvelden delegate op zichzelf (de weergave).
Antwoord 13
IN Swift 3
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.view.endEditing(true)
}
OF
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
if textField == yourtextfieldName
{
self.resignFirstResponder()
self.view.endEditing(true)
}
}
Antwoord 14
Eerst moet u het tekstveld delegete toevoegen in het .h-bestand. zo niet declareren
(BOOL)textFieldShouldReturn:(UITextField *)textField
deze methode wordt niet aangeroepen. Dus voeg eerst een gemachtigde toe en schrijf toetsenbordverbergcode in die methode.
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
probeer deze eens..
Antwoord 15
Dus dit is wat ik deed om het te laten verdwijnen nadat ik de achtergrond had aangeraakt of was teruggekeerd. Ik moest de delegate = self in viewDidLoad toevoegen en vervolgens ook de delegate-methoden later in de .m-bestanden.
.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController <UITextFieldDelegate>
@property (strong, atomic) UITextField *username;
@end
.m
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blueColor];
self.username = [[UITextField alloc] initWithFrame:CGRectMake(100, 25, 80, 20)];
self.username.placeholder = @"Enter your username";
self.username.backgroundColor = [UIColor whiteColor];
self.username.borderStyle = UITextBorderStyleRoundedRect;
if (self.username.placeholder != nil) {
self.username.clearsOnBeginEditing = NO;
}
self.username.delegate = self;
[self.username resignFirstResponder];
[self.view addSubview:self.username];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
return YES;
}
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
@end
Antwoord 16
Gebruik dit gewoon in Objective-C om het toetsenbord te sluiten:
[[UIApplication sharedApplication].keyWindow endEditing:YES];
Antwoord 17
Gedelegeerde toevoegen: UITextFieldDelegate
@interface ViewController : UIViewController <UITextFieldDelegate>
en voeg dan deze gedelegeerde methode toe
// Dit zou perfect moeten werken
- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
[textField resignFirstResponder];
return YES;
}
Antwoord 18
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view.subviews enumerateObjectsUsingBlock:^(UIView* obj, NSUInteger idx, BOOL *stop) {
if ([obj isKindOfClass:[UITextField class]]) {
[obj resignFirstResponder];
}
}];
}
wanneer u meer dan één tekstveld in het scherm gebruikt
Met deze methode hoef je niet elke keer tekstveld te vermelden zoals
[textField1 resignFirstResponder];
[textField2 resignFirstResponder];
Antwoord 19
Swift 2:
dit is wat er wordt gedaan om alles te doen!
toetsenbord sluiten met de knop Done
of Touch outSide
,Next
aan om naar de volgende invoer te gaan.
Eerste TextFiled Return Key
wijzigen in Next
in StoryBoard.
override func viewDidLoad() {
txtBillIdentifier.delegate = self
txtBillIdentifier.tag = 1
txtPayIdentifier.delegate = self
txtPayIdentifier.tag = 2
let tap = UITapGestureRecognizer(target: self, action: "onTouchGesture")
self.view.addGestureRecognizer(tap)
}
func textFieldShouldReturn(textField: UITextField) -> Bool {
if(textField.returnKeyType == UIReturnKeyType.Default) {
if let next = textField.superview?.viewWithTag(textField.tag+1) as? UITextField {
next.becomeFirstResponder()
return false
}
}
textField.resignFirstResponder()
return false
}
func onTouchGesture(){
self.view.endEditing(true)
}
Antwoord 20
Als u de huidige weergavecontroller of tekstweergave niet kent, kunt u de Responder Chain gebruiken:
UIApplication.shared.sendAction(#selector(UIView.endEditing(_:)), to:nil, from:nil, for:nil)
Antwoord 21
voor snelle 3-4ik heb het opgelost zoals
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
return false
}
kopieer en plak overal in de klas. Deze oplossing werkt alleen als je wilt dat alle UItextfield hetzelfde werken, of als je er maar één hebt!