свойство button.tag не работает в ячейке UItableView - PullRequest
1 голос
/ 06 июня 2011

Я добавляю кнопку загрузки в дополнительном представлении ячейки .. мой код

button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *image = [UIImage imageNamed:@"download.png"];
[button setImage:image forState:UIControlStateNormal];
 //[button setTitle:@"Download" forState:UIControlStateNormal];
[button setFrame: CGRectMake( 110.0f, 3.0f, 80.0f, 30.0f)];
[button addTarget:self action:@selector(someAction) forControlEvents:UIControlEventTouchUpInside];
button.tag = indexPath.row;
cell.accessoryView = button;

И я хочу передать имя файла из индексного пути ячейки, но это не работает. Требуется только первая строка ...

- (void)someAction {

    [self.activityIndicator startAnimating];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *file = [NSString stringWithFormat:@"/%@",[metaArray objectAtIndex:button.tag]]; 
    NSLog(@"%@", button.tag);   
    NSString *path = [NSString stringWithFormat:@"%@/Downloaded Data/%@",[paths objectAtIndex:0],file];

//  NSString *loadFileName = [NSString stringWithFormat:@"/%@/%@",Name,file];
    [self.restClient loadFile:file intoPath:path];
    NSLog(@"Downloaded:%@",file);
}

Это сбой из-за button.tag = indexpath.row и если я не передам button.tag = indexpath.row, он пропускает только первую строку пожалуйста помогите

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

tag является целочисленным свойством.Вы пытаетесь распечатать его как объект в NSLog.Вы должны напечатать это так: NSLog(@"%d", button.tag);

На самом деле вам нужно назначить отдельные кнопки загрузки для каждой ячейки.

UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
UIImage *image = [UIImage imageNamed:@"download.png"];
[button setImage:image forState:UIControlStateNormal];
//[button setTitle:@"Download" forState:UIControlStateNormal];
[button setFrame: CGRectMake( 110.0f, 3.0f, 80.0f, 30.0f)];
[button addTarget:self action:@selector(someAction:) forControlEvents:UIControlEventTouchUpInside];
button.tag = indexPath.row;
cell.accessoryView = button;

И определить свой метод someAction следующим образом:

- (void)someAction:(id)sender {

    UIButton *button = (UIButton *)sender;
    NSLog(@"%d", button.tag); 
    [self.activityIndicator startAnimating];
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *file = [NSString stringWithFormat:@"/%@",[metaArray objectAtIndex:button.tag]];   
    NSString *path = [NSString stringWithFormat:@"%@/Downloaded Data/%@",[paths objectAtIndex:0], file];
   //NSString *loadFileName = [NSString stringWithFormat:@"/%@/%@",Name,file];
    [self.restClient loadFile:file intoPath:path];
    NSLog(@"Downloaded:%@", file);
}
1 голос
/ 06 июня 2011

строки UITableView можно использовать повторно, не устанавливайте тег с индексом строки, вместо этого используйте этот метод

- (void)tableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath{
    id rowObject = [myArray objectAtIndex:indexPath.row];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...