5

こんにちは、プログラミングの初心者で、このタスクに何年も立ち往生していて、どこにも行かないようです。

基本的に、ユーザーがボタンを押したときに別のページに入力情報を生成するいくつかのテキストフィールドがあります。すべてのテキストフィールドに情報が入力されるまで、ボタンを無効にしたいのですが。

これまでのところ私はこれを持っています:

    - (void)textFieldDidEndEditing:(UITextField *)textField
{
    // make sure all fields are have something in them

if ((textfbookauthor.text.length  > 0)&& (textfbookedition.text.length > 0)&& (textfbookplace.text.length > 0)&& (textfbookpublisher.text.length > 0) && (textfbookpublisher.text.length > 0) && (textfbooktitle.text.length > 0)  && (textfbookyear.text.length > 0)) {
        self.submitButton.enabled = YES;
    }
    else {
        self.submitButton.enabled = NO;
    }
}

問題は、「submitButton」がエラーを出していることです。その場所に何を配置する必要がありますか?代わりにボタン「bookbutton」を入れようとしましたが、機能しません。

これは「生成」ボタンの私の機能です

    -(IBAction)bookbutton:(id)sender;
{
    NSString* combinedString = [NSString stringWithFormat:
                                @"%@ %@ %@.%@.%@:%@.", 
                                textfbookauthor.text,
                                textfbookyear.text,
                                textfbooktitle.text,
                                textfbookedition.text,
                                textfbookplace.text,
                                textfbookpublisher.text];
    BookGenerate*bookg = [[BookGenerate alloc] init];
    bookg.message = combinedString;
    bookg.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:bookg animated:YES];
    [BookGenerate release];
}

誰かが私がそれを機能させる方法や私が追加する必要があるものを知っているなら、助けてください。

前もって感謝します

4

5 に答える 5

25

すべてのUITextFieldのアウトレットを作成し、.hにIBActionを作成します。

IBOutlet UITextField *textField1;
IBOutlet UITextField *textField2;
IBOutlet UITextField *textField3;
IBOutlet UIButton *button

- (IBAction)editingChanged;

すべてのアウトレットを接続し、editingChangedを使用してIBActionをすべてのテキストフィールドに接続します。

 - (IBAction)editingChanged {
    if ([textfield1.text length] != 0 && [textfield2.text length] != 0 && [textfield3.text length] != 0) {
         [button setEnabled:YES];
     }
     else {
         [button setEnabled:NO];
     }
 }

空のtextFieldを認識するために、その前に( 'ではない'を意味する)を使用[textfield.text isEqualToString:@""]して配置し、'textFieldが空の場合は...'と言うこともできることに注意してください。!!

と:

- (void)viewDidLoad {
    [super viewDidLoad];
    [button setEnabled:NO];
}
于 2011-08-15T17:02:05.910 に答える
6

ボタンがあり、テキストフィールドまたはテキストビューにテキストがある場合にのみボタンを有効にする場合は、followメソッドを実装します

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{    
    if (textView.text.length > 1 || (text.length > 0 && ![text isEqualToString:@""]))
    {
        self.button.enabled = YES;
    }
    else
    {
        self.button.enabled = NO;
    }

    return YES;
}
于 2012-12-20T16:04:45.400 に答える
2

これらの投稿でも利用できるソリューションはほとんどありません

ここで重要なのは、(拡張)UITextFieldDelegateクラスとそれに関連する関数を使用することです

//Need to have the ViewController extend UITextFieldDelegate for using this feature
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {

    // Find out what the text field will be after adding the current edit
    let text = (textField.text as NSString).stringByReplacingCharactersInRange(range, withString: string)

    if !text.isEmpty{//Checking if the input field is not empty
        button.userInteractionEnabled = true //Enabling the button
    } else {
        button.userInteractionEnabled = false //Disabling the button
    }

    // Return true so the text field will be changed
    return true
}
于 2015-07-28T03:04:47.263 に答える
1

「テキストフィールドは範囲内の文字を変更する必要があります」を使用する必要があります(uitextviewdelegateについてはアップルのドキュメントを参照してください)。ユーザーが情報を入力すると更新されるためです。「テキストフィールドは編集を終了しました」は、ユーザーがテキストフィールドの編集を終了するか、Enterキーを押したときにのみ発生します。ほとんどの場合、誰かが最後のフィールドに入力し、カーソルをそこに置いたままにして、ボタンが有効になることを期待します...しかし、入力を入力したからといって、「テキストフィールドが編集を終了しました」を使用しても、それは起こりません。

これを行って長さを確認することもできます

if([self.textfiele.text isEqualToString:@""])
于 2011-08-15T15:17:34.750 に答える
1

UITextFieldごとにIBOutletsを設定することに加えて、配列内の3つのテキストフィールドすべてを含むIBOutletCollectionを宣言しておくと便利な場合があります。

@property (nonatomic, retain) IBOutletCollection(UITextField) NSArray *textFields;

次に、実装@synthesize textFieldsでは、そこに含まれるテキストフィールドをすばやくループして、テキストをチェックできます。

- (IBAction)editingChanged
{
    BOOL buttonShouldBeEnabled = YES;

    for (UITextField *field in self.textFields)
        if (!field.text.length)
            buttonShouldBeEnabled = NO;

    button.enabled = buttonShouldBeEnabled;
}
于 2011-08-16T04:56:33.023 に答える