2017-08-03 7 views
0

ボタンを押した後に次のラベルと前のラベルに移動するラベルの付いたテーブルがありますが、ツールバーがUITextField拡張に存在するという問題があります。キーボードのツールバーとView Controllerをどのように接続しますか?

セレクタを使用してビューコントローラのアクションを呼び出して、その中のテキストフィールドを参照していますが、「インスタンスに送信されたセレクタが認識されません」というエラーが発生しています。

次のボタンと前のボタンを追加するUITextField拡張モジュール内の2行のコードです。ここで

let nextButton = UIBarButtonItem(title: “Next”, style: .plain, target: self, action: #selector(HomeViewController.nextButtonTapped(_:))) 

let previousButton = UIBarButtonItem(title: “Prev”, style: .plain, target: self, action: #selector(HomeViewController.previousButtonTapped(_:))) 

は私が起動することにしたいHomeViewControllerの関数です:

func nextButtonTapped(_ sender: UIBarButtonItem) { 
    // 
} 

func previousButtonTapped(_ sender: UIBarButtonItem) { 
    // 
} 

私は現在のビューコントローラとの間には、実際の接続がないので、私はエラーを取得する可能性があることを理解します私はそれらの間の接続を作る方法がわかりません。

ここに私が言及しているもののスクリーンショットがあります。 Screenshot

+0

ツールバーにボタンを追加する方法ですあなたは私がここにそれを投稿したい場合私に教えてください –

+0

私はobjective-Cを読むことができます、見てもいい? –

+0

サブビュー終了、次と前のボタンを含むビューを取得し、ビューをキーボードアクセサリビューとして追加します。次に、ボタンアクションメソッドでロジックを実装します。 – iMuzahid

答えて

1

の1-サブクラスのUITextFieldとあなたのテキストフィールドのためのクラスとして

class CustomTextField : UITextField 

2 - 方法と​​プロトコルを作成する "TextFieldを:moveToTextFieldWithTagを:" それを設定し

@protocol CustomTextFieldDelegate <NSObject> 
@required 
- (void) textField:(CustomTextField*)textField moveToTextFieldWithTag:(int)tag; 
@end 

、3-セットをテキストフィールドのdelegateとしてのviewcontroller。

cell.textField.delegate = viewController; 

4 textfieldsタグとtableviewcells + 1タグとしてindexpath.row + 1を設定します。

cell.tag = indexPath.row + 1; 
cell.textField.tag = indexPath.row + 1; 

5-

UIBarButtonItem *prevButton = [[UIBarButtonItem alloc] initWithTitle:@"prev" style:UIBarButtonItemStylePlain target:self action:@selector(prevAction)]; 

UIBarButtonItem *nextButton = [[UIBarButtonItem alloc] initWithTitle:@"next" style:UIBarButtonItemStylePlain target:self action:@selector(nextAction)]; 

6-テキストフィールドサブクラスのツールバーボタンの方法を実装するツールバーボタンを作成します。

- (void)nextAction { 
    int newTag = self.tag + 1; 
    if([self.delegate respondsToSelector:@selector(textField:moveToTextFieldWithTag:)]) { 
     [((id<CustomTextFieldDelegate>)self.delegate) textField:self moveToTextFieldWithTag:newTag]; 
    } else { 
     [self endEditing:YES]; 
    } 
} 

7のViewController

//.h 
@interface Controller : ParentClass <CustomTextFieldDelegate> 
//.m 
-(void)textField:(CustomTextField *)textField moveToTextFieldWithTag:(int)tag { 
    UITableViewCell* celda = [self.tableView viewWithTag:tag]; 
    UIResponder *nextResponder = [celda.contentView viewWithTag:tag]; 
    if(nextResponder) { 
     [nextResponder becomeFirstResponder]; 
    } else { 
     [textField resignFirstResponder]; 
    } 
} 

EDIT上のプロトコルを実装します。これは私がこんにちは、私はこれを実装しますが、そのいる

UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.bounds.size.width, 44)]; 
NSArray *toolbarButtons = [[NSArray alloc]initWithObjects:prevButton,nextButton, nil]; 
[toolBar setItems:toolbarButtons]; 
self.inputAccessoryView = toolBar; 
+0

申し訳ありませんが、文法上のエラーがありましたら..私は今ここでXCodeを持っていないので、ここに書かなければなりませんでした:( –

+0

ツールバーに次のボタンと前のボタンを追加したかどうかボタンはUITextfieldサブクラスで宣言されていますか? –

+0

ボタンとツールバーの追加方法を確認できるように回答を編集しました。はい(addToolBar)メソッドを作成しましたが、アクションもそこにあります。私のアプリ。 –

関連する問題