2012-05-11 3 views
0

У меня есть номер 12345678910111213, и мне нужно передать его одним методом (cellForRow) другому (метод действия кнопки). Самый простой способ, которым я пользовался, - передать его через тег кнопки. В этом случае это невозможно (?). Я также могу создать свойство для него, но как насчет инкапсуляции? Я хочу знать действительно ПРАВИЛЬНЫЙ (и, желательно, простой) способ делать такие вещи. Заранее спасибо!Работа с большими номерами

ответ

1

Ну, вы действительно можете привязать значение к UIButton. Если у вас есть значение, которое вы хотите передать, и у вас есть ссылка на эту кнопку:

static char kMyObject; 

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

С другой стороны, когда вы получаете действие с помощью кнопки в качестве ID:

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

цифры могут отличаться от ячейки к ячейке ... – Stas

+0

@Zaph спасибо ... – Peres

+0

@Stas Я просто объясню, как вы можете передать значение. Как вы на самом деле заполняете свои ячейки и как вы упорядочиваете цифры, зависит от вас ... – Peres

0

В этом integer, вы можете сохранить указатель (случай 32-разрядного адреса) в класс/структуру/независимо от того, что представляет bigint.

Например:

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. У вас есть легкий доступ к таблице TableView.

Во-первых, вам необходимо получить ячейку, которая содержит кнопку:

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

Извините, это не так просто, но насколько я могу судить, это правильный способ получить доступ к модели из ячейки таблицы. Я создал категорию для UIView, которая имеет метод -cellSuperview для выполнения первой части.Затем я создал метод -objectForSender: в контроллере, поэтому мне не нужно писать этот код для каждого действия. –

Смежные вопросы