2012-05-11 18 views
0

私は12345678910111213のような数字を持っており、あるメソッド(cellForRow)から別のメソッド(buttonアクションメソッド)に渡す必要があります。私が使用した最も簡単な方法は、ボタンタグを渡すことです。この場合は不可能です(?)。私はそれのためのプロパティを作成することもできますが、カプセル化についてはどうですか?私は本当にそのようなことをするための正しい(そして、好ましくは単純な)方法を知りたい。前もって感謝します!ビッグ・ナンバーを使って作業する

答えて

1

実際にはUIButtonに値を添付することができます。あなたがIDとしてボタンでアクションを受信したとき、他の側では

static char kMyObject; 

objc_setAssociatedObject(myButton, &kMyObject, [NSNumber numberWithInt:myInt], OBJC_ASSOCIATION_RETAIN_NONATOMIC); 

:この中

- (void)myAction:(id)sender 
{ 
    UIButton *myButton = (UIButton*)sender; 
    NSNumber *number=objec_getAssociatedOject(myButton,&kMyObject); 
} 
+0

数字はセルごとに異なる場合があります。 – Stas

+0

@Zaphありがとう... – Peres

+0

@Stas私はちょうどあなたが値を渡すことができます説明しています。あなたの細胞を実際にどのように移植し、どのように数字を整理するかはあなた次第です... – Peres

0

あなたが合格したいとあなたがボタンへの参照を持っている価値を持っている場合整数タグでは、どのようなbigintを表していても、クラス/構造体にポインタ(32ビットアドレスの場合)を格納できます。例えば

UIButton *button = [UIButton ...]; 
button.tag = (int)[[MyBigInt alloc] initWithString:@"12131312312312312"]; 

後:サアドが言ったようにあなたがタグとしてそれを渡すことはできません

MyBigInt *bigInt = (MyBigInt *)button.tag; 
... 
[bigInt release]; 
0

。ここでNSDecimal numbersを使用できます。 @Saadは精度を失うので、doubleを使用することはできません。

0

ここではいくつかの前提を設定します

  1. アクションを含むUIButtonは、UITableViewCellにあります。
  2. すべてのデータ(つまり、すべてのデータを含む配列)の基礎となるソースがあります。
  3. テーブルビューに簡単にアクセスできます。

まず、あなたがボタンを含むセルを取得する必要があります。

UITableViewCell *cell = nil; 
for (UIView *view = sender; view; view = view.superview) { 
    if ([view isKindOfClass:[UITableViewCell class]]) { 
     cell = (UITableViewCell *)view; 
     break; 
    } 
} 

次へ]を、あなたはそのセルのためのindexRowを取得する必要があります:

NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 

最後に、あなたがする必要がありますあなたのデータにアクセスする:

ModelClass modelObject* obj = [self.data objectAtIndex:indexPath.row]; 

ここでは、あなたのモデルにする必要があります。

+0

申し訳ありませんが、それほど単純ではありませんが、わかる限り、これはテーブルビューのセルからモデルにアクセスする適切な方法です。最初の部分を行うためのメソッド-cellSuperviewを持つUIViewのカテゴリを作成しました。私はその後、コントローラ内でメソッド-objectForSenderを作成したので、各アクションのコードを書く必要はありません。 –