Tampilkan jumlah klik tombol dalam label untuk sel tertentu yang merupakan subview dari uitableview

Saya memiliki tombol dan label yang merupakan sub tampilan UITableView.

Awalnya nilai label adalah 0.

yang saya perlukan adalah, ketika saya mengklik tombol pada sel tertentu saya ingin menambah nilai dalam label sel yang sama (seperti 1) dan menampilkan nilai itu dalam label yang sama.

Dan sekali lagi saya mengklik tombol sel yang sama, label di sel itu harus bertambah (seperti 2) dan menampilkan nilai itu di sel yang sama di UITableView.

Kode saya..

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

{
static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *Lbl;
UIButton *btn;
if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    Lbl =[[UILabel alloc]init];
    [Lbl setFrame:CGRectMake(56, 60, 117, 12)];
    [Lbl setBackgroundColor:[UIColor clearColor]];
    [Lbl setTextAlignment:NSTextAlignmentLeft];
    [Lbl setFont:[UIFont boldSystemFontOfSize:15.0]];
    Lbl.tag=indexPath.row;
    [cell.contentView addSubview:Lbl];

    btn =[UIButton buttonWithType:UIButtonTypeCustom];
    [btn setTitle:@"add" forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0] forState:UIControlStateNormal];
    [btn setTitleColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0] forState:UIControlStateHighlighted];
    [[btn titleLabel] setFont:[UIFont boldSystemFontOfSize:23]];
    [btn setFrame:CGRectMake(289, 2, 30, 71)];
    btn.tintColor=[UIColor lightGrayColor];
    btn.tag=indexPath.row;
    [btn addTarget:self action:@selector(increaseItemCount:) forControlEvents:UIControlEventTouchUpInside];
    [cell.contentView addSubview:btn];
} else {
    Lbl =(UILabel *)[cell.contentView viewWithTag:indexPath.row];
    btn =(UIButton *)[cell.contentView viewWithTag:indexPath.row];
}

cell.textLabel.text=@"title";
countLbl.text = [[NSString alloc] initWithFormat:@"%d",showItemCount];

return cell;

}

// button action method
-(void)increaseItemCount:(UIButton *)sender
{    
UITableViewCell *cell = (UITableViewCell *)sender.superview.superview;
NSIndexPath *path = [tableView indexPathForCell:cell];
NSLog(@"row: %d",path.row);
UILabel *countLbl =(UILabel *)[cell.contentView viewWithTag:path.row];
showItemCount=[countLbl.text intValue] + 1;
NSLog(@"%d",showItemCount);
countLbl.text = [[NSString alloc] initWithFormat:@"%d",showItemCount];

}

Saya mencoba ini, Setelah mengklik, nilainya ditampilkan di sel lain dan ketika saya menggulir tampilan tabel, nilai itu ditampilkan di semua sel.

Ada saran atau kode


person Community    schedule 08.08.2013    source sumber
comment
Mengapa Lbl.tag=indexPath.row;?   -  person Meera    schedule 08.08.2013
comment
Aku tidak bisa menghubungimu. bisakah kamu memberitahuku di mana masalahnya   -  person    schedule 08.08.2013
comment
Apakah Anda mendapatkan hitungan yang benar, tetapi Anda mengacaukan sel tabelnya? Saya kira tag label adalah pelakunya   -  person Meera    schedule 08.08.2013


Jawaban (4)


Jika Anda menginginkan kode sumber, Unduh dari sini https://github.com/MasudShuvo/TestCustomTableViewCell

Saya telah memodifikasi kode sesuai kebutuhan Anda.

person shuvo    schedule 08.08.2013
comment
Saya mencoba kode Anda, itu berhasil. Ketika saya menambah tinggi sel menjadi 65, aplikasinya berkerut. Ini menunjukkan kesalahan seperti ini Mengakhiri aplikasi karena pengecualian 'NSRangeException' yang tidak tertangkap, alasan: '*** -[__NSArrayM objectAtIndex:]: indeks 7 melampaui batas [0 .. 6]' - person ; 08.08.2013
comment
Apakah Anda mengubah tinggi sel pada proyek saya atau proyek Anda? - person shuvo; 08.08.2013
comment
bisakah kamu memberi tahu saya cara menghentikan penurunan nilai...ketika nilainya mencapai 0 - person ; 08.08.2013
comment
bisakah Anda memberi tahu saya cara menerapkan tekan lama bersamaan dengan klik - person ; 08.08.2013
comment
stackoverflow.com/questions/6179347/uibutton-long-press-event, stackoverflow.com/questions/11200079/long-pressed-uibutton silakan periksa tautan ini, Mungkin ini dapat membantu Anda. - person shuvo; 08.08.2013
comment
Ketika saya menjalankan proyek Anda, itu berfungsi dengan baik. ketika menerapkannya ke dalam proyek saya, aplikasinya mogok. Ini menunjukkan kesalahan seperti ini -[__NSArrayM objectAtIndex:]: indeks 0 melampaui batas untuk array kosong' - person ; 08.08.2013
comment
Baik untuk mendengar bahwa :-). toilet - person shuvo; 08.08.2013
comment
Hai, Shuvo. bantuan kecil.......Bagaimana mengimplementasikan searchBar dan searchDisplayController di proyek Anda. - person ; 09.08.2013

Itu karena sepertinya Anda menggunakan variabel instan tunggal untuk menyimpan itemCount. Anda harus menggunakan array untuk mengetahui sel mana yang telah diklik berapa kali. Namun kodenya cukup berantakan, jadi Anda harus menulisnya lagi dari awal

person Vik    schedule 08.08.2013
comment
Ya, Anda benar..saya menggunakan satu variabel instan untuk menyimpan jumlah klik. Bisakah Anda memberikan beberapa kode untuk dipecahkan - person ; 08.08.2013
comment
Anda cukup menggunakan variabel instan NSMutableArray yang diinisialisasi dengan @0 untuk setiap indeks. lalu di mana Anda memiliki showItemCount = [...] Anda dapat melakukan myInstanceVariable[indexPath.row] = @(myInstanceVariable[indexPath.row] + 1); dan di mana Anda memiliki countLbl.text = [...] Anda dapat menulis countLbl.text = [NSString stringWithFormat:@"%@",myInstanceVariable[indexPath.row]]; - person Vik; 08.08.2013
comment
Baris ini memberikan kesalahan, di mana sel yang dipilih adalah array yang dapat diubah. sel yang dipilih[indexPath.row]=@(sel yang dipilih[indexPath.row] + 1); - person ; 08.08.2013
comment
Ya, saya mengetiknya secara membabi buta. Anda mungkin harus membungkus selectedCells[indexPath.row] dengan [... intValue] sehingga terlihat seperti = @([selectedCells[indexPath.row] intValue] + 1); - person Vik; 08.08.2013
comment
Sekarang, aplikasi saya mogok karena kesalahan di baris ini countLbl.text = [NSString stringWithFormat:@%@,selectedCells[indexPath.row]]; saya menggunakan baris ini dalam metode cellForRowAtIndexPath - person ; 08.08.2013
comment
[__NSArrayM objectAtIndex:]: indeks 1 melampaui batas [0 .. 0]' - person ; 08.08.2013
comment
Dalam komentar saya, saya mengatakan bahwa Anda harus menginisialisasi array dengan @0 untuk setiap indeks. Itu berarti Anda harus melakukan sesuatu seperti [selectedCells addObject:@0] dalam siklus for untuk berapa banyak sel yang Anda miliki. Atau Anda juga bisa melakukan di cellForRowAtIndexPath pemeriksaan dengan if([selectedCells count] <= indexPath.row) [selectedCells addObject:@0] sebelum dan alih-alih menambah konten. - person Vik; 08.08.2013

indexPath.row dimulai 0 hingga n, kami tidak menetapkan tag 0 untuk label dan Anda menggunakan variabel tunggal showItemCount yang digunakan untuk menetapkan teks dalam countLbl, tabel lihat gunakan kembali sel ketika sel itu muncul, gunakan array untuk menyimpan showItemCount untuk setiap sel

person NANNAV    schedule 08.08.2013

silakan lakukan seperti berikut:

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    selectedIndex=-1;
    //[tblView reloadData];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return 2;
}

// Row display. Implementers should *always* try to reuse cells by setting each cell's reuseIdentifier and querying for available reusable cells with dequeueReusableCellWithIdentifier:
// Cell gets various attributes set automatically based on table (separators) and data source (accessory views, editing controls)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   // UILabel *Lbl;
   // UIButton *btn;
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

        UILabel *Lbl =[[UILabel alloc]init];
        [Lbl setFrame:CGRectMake(56, 60, 117, 12)];
        [Lbl setBackgroundColor:[UIColor clearColor]];
        [Lbl setTextAlignment:NSTextAlignmentLeft];
        [Lbl setFont:[UIFont boldSystemFontOfSize:15.0]];
        Lbl.tag=indexPath.row;
        Lbl.text=[NSString stringWithFormat:@"%i",0];
        [cell.contentView addSubview:Lbl];

        UIButton *btn =[UIButton buttonWithType:UIButtonTypeCustom];
        [btn setTitle:@"add" forState:UIControlStateNormal];
        [btn setTitleColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0] forState:UIControlStateNormal];
        [btn setTitleColor:[UIColor colorWithRed:0.7 green:0 blue:0 alpha:1.0] forState:UIControlStateHighlighted];
        [[btn titleLabel] setFont:[UIFont boldSystemFontOfSize:23]];
        [btn setFrame:CGRectMake(289, 2, 30, 71)];
        btn.tintColor=[UIColor lightGrayColor];
        btn.tag=indexPath.row;
        [btn addTarget:self action:@selector(increaseItemCount:) forControlEvents:UIControlEventTouchUpInside];
        [cell.contentView addSubview:btn];

 NSLog(@"Selected Index:%i",indexPath.row);   
    } else {

       UILabel *Lbl =(UILabel *)[cell.contentView viewWithTag:indexPath.row];
      //UIButton *btn =(UIButton *)[cell viewWithTag:indexPath.row];

        if(indexPath.row==selectedIndex)
        {
             NSLog(@"Selected Index in CellForRowAtIndexPath:%i",indexPath.row);
            Lbl.text=[NSString stringWithFormat:@"%i",[Lbl.text intValue]+1];
        }

    }

   // cell.textLabel.text=@"title";
    //countLbl.text = [[NSString alloc] initWithFormat:@"%d",showItemCount];

    return cell;
}

-(void)increaseItemCount:(UIButton *)sender
{
    selectedIndex=sender.tag;
    [tblView reloadData];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Selected Index:%i",indexPath.row);
}

saya harap ini akan membantu Anda.

person hpp    schedule 08.08.2013
comment
Saya ingin meningkatkan jumlah klik tombol - person ; 08.08.2013
comment
Saya mencoba, tetapi jumlah bertambah secara otomatis ketika saya menggulir tampilan tabel dan jumlah bertambah dalam sel acak - person ; 08.08.2013