簡體   English   中英

自定義鍵盤,文本輸入到UITextField

[英]Custom Keyboard with Text Input to UITextField

我在實現鍵盤附件時遇到困難,當在附件上按下鍵時,該鍵盤附件將文本輸入到UITextField中。 這是粗略的草案看起來像:

鍵盤附件圖片

最終我想要當用戶點擊'@gmail按鈕,讓它輸入當前的電子郵件地址UITextField @ gmail.com,這樣用戶就不必輸入它了。 我遇到了問題,因為我正在以編程方式編寫keyboardaccessoryview,我無法弄清楚是否有來自keyboardaccess的keyinput轉到電子郵件地址的UITextField。 我曾經嘗試過使用IBAction

NSString *appendThisText = @"@gmail.com";
self.textFieldOne.text=[NSString stringWithFormat:@"%@%@", self.textFieldOne.text, appendThisText];

但那沒用。 我需要幫助。 這是我的signInViewController.h的代碼

#import <UIKit/UIKit.h>
#import <AVFoundation/AVAudioPlayer.h>
#import <AudioToolbox/AudioToolbox.h>

@interface signInViewController : UIViewController <UITextFieldDelegate, UITextViewDelegate> {
    AVAudioPlayer *sound;
    UIButton *myButton;
    UITextField *textFieldOne;
    UIButton *gmailButton;
    UIButton *meButton;
     UIButton *yahooButton;
    UIButton *outlookButton;
    UIView *inputAccView;
    UIButton *aolButton;
}


- (IBAction)playSwoosh:(id)sender;

- (IBAction)dismiss:(id)sender;

- (IBAction)toggleUIButtonImage:(id)sender;

- (IBAction)backgroundTouched:(id)sender;



@property (weak, nonatomic) IBOutlet UITextField *textFieldOne;
@property (weak, nonatomic) IBOutlet UITextField *textFieldTwo;
@property (nonatomic, retain) UIButton *gmailButton;
@property (nonatomic, retain) UIButton *meButton;
@property (nonatomic, retain) UIButton *yahooButton;
@property (nonatomic, retain) UIButton *outlookButton;
@property (nonatomic, retain) UIButton *aolButton;
@property (retain, nonatomic) UIButton *myButton;
@property (nonatomic, retain) UIView *inputAccView;

@end

這是我的signInViewController.m

#import "signInViewController.h"
#import <QuartzCore/QuartzCore.h>

@interface signInViewController ()

@end

@implementation signInViewController

@synthesize myButton = _myButton;
@synthesize textFieldOne = _textFieldOne;
@synthesize textFieldTwo = _textFieldTwo;
@synthesize inputAccView;
@synthesize gmailButton;
@synthesize yahooButton;
@synthesize meButton;
@synthesize outlookButton;
@synthesize aolButton;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}


- (void)createInputAccessoryView {
inputAccView = [[UIView alloc] initWithFrame:CGRectMake(10.0, 0.0, 310.0, 30.0)];
[inputAccView setBackgroundColor:[UIColor clearColor]];
[inputAccView setAlpha: 0.8];

gmailButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
[gmailButton setBackgroundImage:[UIImage imageNamed:@"keyboardtoolbar.png"] forState:UIControlStateNormal];
//[gmailButton sizeToFit]
[gmailButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
gmailButton.titleLabel.font = [UIFont fontWithName:@"Heiti TC" size:12];
[gmailButton setFrame: CGRectMake(0.0, 0.0, 60.0, 30.0)];
[gmailButton setTitle:@"@Gmail" forState:UIControlStateNormal];
[gmailButton setBackgroundColor:[UIColor lightGrayColor]];
[inputAccView addSubview:gmailButton];

meButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
[meButton setBackgroundImage:[UIImage imageNamed:@"keyboardtoolbar.png"] forState:UIControlStateNormal];
//[gmailButton sizeToFit]
[meButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
meButton.titleLabel.font = [UIFont fontWithName:@"Heiti TC" size:12];
[meButton setFrame: CGRectMake(60.0, 0.0, 50.0, 30.0)];
[meButton setTitle:@"@Me" forState:UIControlStateNormal];
[meButton setBackgroundColor:[UIColor lightGrayColor]];
[inputAccView addSubview:meButton];

yahooButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
[yahooButton setBackgroundImage:[UIImage imageNamed:@"keyboardtoolbar.png"] forState:UIControlStateNormal];
//[gmailButton sizeToFit]
[yahooButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
yahooButton.titleLabel.font = [UIFont fontWithName:@"Heiti TC" size:12];
[yahooButton setFrame: CGRectMake(110.0, 0.0, 70.0, 30.0)];
[yahooButton setTitle:@"@Yahoo" forState:UIControlStateNormal];
[yahooButton setBackgroundColor:[UIColor lightGrayColor]];
[inputAccView addSubview:yahooButton];

outlookButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
[outlookButton setBackgroundImage:[UIImage imageNamed:@"keyboardtoolbar.png"] forState:UIControlStateNormal];
//[gmailButton sizeToFit]
[outlookButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
outlookButton.titleLabel.font = [UIFont fontWithName:@"Heiti TC" size:12];
[outlookButton setFrame: CGRectMake(180.0, 0.0, 70.0, 30.0)];
[outlookButton setTitle:@"@Outlook" forState:UIControlStateNormal];
[outlookButton setBackgroundColor:[UIColor lightGrayColor]];
[inputAccView addSubview:outlookButton];

aolButton = [UIButton buttonWithType: UIButtonTypeRoundedRect];
[aolButton setBackgroundImage:[UIImage imageNamed:@"keyboardtoolbar.png"] forState:UIControlStateNormal];
//[gmailButton sizeToFit]
[aolButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
aolButton.titleLabel.font = [UIFont fontWithName:@"Heiti TC" size:12];
[aolButton setFrame: CGRectMake(250.0, 0.0, 50.0, 30.0)];
[aolButton setTitle:@"@Aol" forState:UIControlStateNormal];
[aolButton setBackgroundColor:[UIColor lightGrayColor]];
[inputAccView addSubview:aolButton];

}


- (IBAction)backgroundTouched:(id)sender {
[_textFieldOne resignFirstResponder];
[_textFieldTwo resignFirstResponder];
}


- (void)textFieldDidBeginEditing:(UITextField *)textField {

if (textField == self.textFieldOne) {
    [self createInputAccessoryView];
    [textField setInputAccessoryView:inputAccView];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.view.frame = CGRectMake(self.view.frame.origin.x, (self.view.frame.origin.y - 95), self.view.frame.size.width, self.view.frame.size.height);
    [UIView commitAnimations];
} else if (textField == self.textFieldTwo) {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.view.frame = CGRectMake(self.view.frame.origin.x, (self.view.frame.origin.y - 95), self.view.frame.size.width, self.view.frame.size.height);
    [UIView commitAnimations];
}
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
if (textField == self.textFieldOne) {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.view.frame = CGRectMake(self.view.frame.origin.x, (self.view.frame.origin.y + 95), self.view.frame.size.width, self.view.frame.size.height);
    [UIView commitAnimations];
} else if (textField == self.textFieldTwo) {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDelegate:self];
    [UIView setAnimationDuration:0.5];
    [UIView setAnimationBeginsFromCurrentState:YES];
    self.view.frame = CGRectMake(self.view.frame.origin.x, (self.view.frame.origin.y + 95), self.view.frame.size.width, self.view.frame.size.height);
    [UIView commitAnimations];
}
}


- (BOOL)textFieldShouldReturn:(UITextField *)textField {
if (textField) {
    [textField resignFirstResponder];
}
return NO;
}

有人可以幫助我走這條路的正確道路。 我假設它將是一個從gmailButton到textFieldOne的IBAction作為插座,但我不確定如何以編程方式實現它。 它給了我一些問題。 我沒有問題將其轉換為UITextView但我不知道我是否需要使用UITextInput協議或什么。

基本上你只需要為你的按鈕添加一些目標動作(比如IBAction)。

只需將此添加到您的按鈕:

[yourButton addTarget:self action:@selector(yourButtonTapped) forControlEvents:UIControlEventTouchUpInside];

並創建一個處理水龍頭的方法,如:

- (void)yourButtonTapped
{
    self.textFieldOne.text = [self.textFieldOne.text stringByAppendingString:@"whatever"];
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM