2012-09-24 10 views
5

Tablo görünümü hücresinde dinamik olarak bir düğme ekliyorum. Tabloda gösterilen düğme ancak bunları tıklayamıyorum.Tablo hücresine tıklanabilir bir düğme nasıl eklenir?

MessageTableViewCell.h

#import <UIKit/UIKit.h> 
@interface MessageTableViewCell : UITableViewCell { 
{IBOutlet UIButton *chat_pic_btn;}} 
@property (nonatomic, retain) UIButton *chat_pic_btn; 
@end; 

MessageTableViewCell.m

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {chat_pic_btn=[[UIButton alloc]init]; 
[self.contentView addSubview:chat_pic_btn];}} 

MessageTable.m

-(void)customActionPressed :(id)sender 
{ 
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Custom Button Pressed" 
                 message:[NSString stringWithFormat: @"You pressed the custom button on cell"] 
                 delegate:self cancelButtonTitle:@"Great" 
               otherButtonTitles:nil]; 
    [alertView show]; 
} 

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

    static NSString *CellIdentifier = @"CellIdentifier"; 
    MessageTableViewCell *cell = (MessageTableViewCell *)[myTableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     // cell = [[MessageTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]; 
     cell = [[MessageTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
cell.chat_pic_btn.frame = CGRectMake(180, 24, 70,35); 
      [cell.chat_pic_btn setImage:[UIImage imageNamed:@"done.png"]forState:UIControlStateNormal]; 
      [cell.chat_pic_btn addTarget:self action:@selector(customActionPressed:) forControlEvents:UIControlEventTouchDown]; 
return cell; 
} 

Lütf: İşte benim kod,

Bu benim tableviewcell sınıf kodu Bana yardım et. Teşekkürler.

+0

mi? Düzgün mü? – ThomasW

+0

Durumun doğru olması durumunda bir koşul var, ardından düğme ekranda görüntülenir. Düğme doğru şekilde gösterildi ancak tıklama yöntemini kullanamıyorum. – Saurabh

+0

Muhtemelen tablo hücrelerini oluşturmak için kullandığınız kodu da göstermelisiniz. Ayrıca, düğme hücresini tıkladığınızda ne olur? Bir çarpışma var mı? Ya da hiç etkisi yok mu? – ThomasW

cevap

10

yardımcısı olsun değil Button çıkışınızı TableViewCell'inizde silersiniz. ve sadece butonunuzu dinamik olarak cellForRowAtIndexPath içinde yaratın: UITableViewCell'in bir alt sınıfı olan SampleCell Sınıfı oluşturdum, "lbl" adı verilen bir UILabel çıkışı var. Bu, kodunuzun çalışmasında, seçicinizin tablview'nizi koyduğunuz yerdeki aynı sınıfta olduğunu varsayar; Her görünümde bu düğmeye

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"SampleCell"; 
    SampleCell *cell = (SampleCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 
     NSArray* topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"SampleCell" owner:self options:nil]; 
     for (id currentObject in topLevelObjects) { 
      if ([currentObject isKindOfClass:[UITableViewCell class]]) { 
       cell = (SampleCell *)currentObject; 
       break; 
      } 
     } 
    } 
    // Configure the cell. 
    cell.lbl.text = @"Hello"; 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 

    //set the position of the button 
    button.frame = CGRectMake(cell.frame.origin.x + 100, cell.frame.origin.y + 20, 100, 30); 
    [button setTitle:@"World" forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(customActionPressed:) forControlEvents:UIControlEventTouchUpInside]; 
    button.backgroundColor= [UIColor clearColor]; 
    [cell.contentView addSubview:button]; 

    return cell; 
} 
+2

Cevabınız için teşekkürler. Ama yine de çalışmıyor. :( – Saurabh

+0

hmm garip .. ben size IBOutlet UIButton * düğmenin çerçeve için cell.frame.origin değil, sizin TableViewCell Sınıf? –

+0

Kullanım cell.bounds.origin içinde btn sildin .. Bir süre önce onu kodlu. –

1
UIButton *yourBtn = [[UIButton alloc] initWithFrame:CGRectMake(0,0, 50, 50)]; 
[yourBtn setImage:[UIImage imageNamed:@"yourImage.png"] forState:UIControlStateNormal]; 
[yourBtn addTarget:self action:@selector(submitBtnPress:) forControlEvents:UIControlEventTouchUpInside]; 

cell.accessoryView = yourBtn; 
+0

Üzgünüm, sorumu gönderdiğimde benim hatam. Ama işe yaramıyor ... ve aynı zamanda çalışmamasını sağlayan kod satırı. Bu benim aradığım yöntem - (IBAction) show_chat_pic: (id) gönderen { NSLog (@ "in show"); UIImageView * imageview = [[UIImageView ayırma] initWithFrame: CGRectMake (5, 50, 310, 320)]; imageview.image = sender_profile2; [self.view addSubview: imageview]; } – Saurabh

+2

Cevap yok .... Yorum yazılmalıdır ... – Maulik

+0

chk güncellendi answer @ user1652551 – Rajneesh071

0

Sen düğmeye herhangi bir kontrol olayı verilmiş veya UIControlStateNormal den UIControlEventTouchUpInside bunu değiştirin ve sadece bir kere yapmak :)

+0

Ben olay vermiş düşünüyorum [cell.chat_pic_btn addTarget: self action: @selector (show_chat_pic :) forControlEvents: UIControlEventTouchUpInside]; – Saurabh

+0

Bu bağlantıyı kontrol edip, kodunuzu http: // stackoverflow olarak değiştirip değiştirin.com/questions/10732229/uibutton-click-to-click-event-in-uitableviewcell – IronManGill

5

hücre görünümünde EVET UserInteraction ayarlayın emin olun ve düğme

self.userInteractionEnabled = YES;