2016-05-25 20 views
0

UITableViewCellUITextFieldを使用する必要があります。これはParseオープンソースを使用しており、タイトルを返信したいと思います。だから、cellForRowAtIndexPathを呼び出すときには、このようなことをする必要があります。iOS:メソッドを呼び出すUITableViewCellのUITextField

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object 
    { 
     static NSString *CellIdentifier = @"Cell"; 
     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
     UITextField *TextField = (UITextField *) [cell viewWithTag:284]; 

     [TextField setReturnKeyType:UIReturnKeyDone]; 
     [TextField addTarget:self 
           action:@selector(TitleTextFieldFinished:indexPath:object:) 
        forControlEvents:UIControlEventEditingDidEndOnExit]; 

     TextField.text = [object objectForKey:@"Toppingname"]; 

     return cell; 

    } 

そして、それはこのように呼ばれるかもしれない:いずれかがそれは素晴らしいだろう手助けができれば

- (void)TitleTextField:(UITextField *)TextField:(NSIndexPath *)indexPath:(PFObject *)object 
{ 

    [TextField resignFirstResponder]; 
    PFQuery *item = [PFQuery queryWithClassName:@"className"]; 
    [item getObjectInBackgroundWithId:self.menuid 
           block:^(PFObject *title, NSError *error) { 
           NSString *newTitle = @"New title"; 
           title[@"title"] = newTitle; 
           [title saveInBackground]; 

           }]; 
} 

+0

FYI - メソッド名と変数名は小文字で始まります。クラス名は大文字で始まります。この標準に従うことで、コードを他の人が読みやすくすることができます。 – rmaddy

+0

また、匿名のパラメータ名を持つObjective-Cのメソッド名を避ける必要があります。あなたの提案されたテキストフィールドハンドラは 'TitleTextField ::'という名前です。この名前付け規則と空白がないと、コードが読みにくくなります。 – rmaddy

答えて

1

実装は

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CellId" forIndexPath:indexPath]; 

    // Configure the cell... 

    UITextField *textField = (UITextField *) [cell viewWithTag:284]; 

    [textField setReturnKeyType:UIReturnKeyDone]; 
    [textField addTarget:self 
        action:@selector(titleTextField:inIndexPath:forObject:) 
     forControlEvents:UIControlEventEditingDidEndOnExit]; 

    textField.text = @"Sandeep"; 

    return cell; 
} 


- (void)titleTextField:(UITextField *)textField inIndexPath:(NSIndexPath *)indexPath forObject:(PFObject *)object { 

    [textField resignFirstResponder]; 

} 

を下回るようにすることができますが、送信者(UITextFieldのは)それが送るべきindexPath、どのオブジェクトについて知らなかったので、あなたは「indexPath」と「オブジェクト」の値を取得することはありません。

+0

いいえ、このようなことはできません。 'addTarget:action:forControlEvents:'メソッドは、0,1、または2のパラメータを持つセレクタのみを受け入れ、任意の型にすることはできません。これはおそらくクラッシュするでしょう。 – rmaddy

1

addTarget:action:forControlEvents:メソッドを使用すると、このメソッドは可能なパラメータに対して非常に限定された固定オプションしか使用できません。それは、パラメータ、1つのパラメータ(制御)、または2つのパラメータ(制御およびイベント)を取らなければならない。

完全に無関係な2つのパラメータを渡そうとしています。さらに、あなたの奇妙なメソッドの命名規則のため、メソッド名は実際にはあなたが入れたものと一致しません@selector

テキストフィールドに基づいてアクションメソッド内にindexPathを指定する必要があります。PFObjectにアクセスするには、別の手段(インスタンス変数など)を使用する必要があります。

Parseによって追加されたものを使用していない限り(私はそれに精通していません)、cellForRowAtIndexPathのメソッドシグネチャは正しくありません。通常はPFObjectパラメータがありません。

関連する問題