2012-05-24 3 views
5

Es gibt diese dunkle Zauberei in ios verhindert, dass meine Schaltfläche angeklickt wird. Wenn ich der uitableviewcell keine Schaltfläche hinzufüge und auf die Schaltfläche klicke, wird das Ereignis ausgelöst. aber wenn die Schaltfläche in uitableviewcell ist, wird es nicht ausgelöst werden, scheint es Tabelle Ich habe Beispielcode bereit, wenn Sie mir helfen können, bitte erstellen Sie einfach eine einfache Einzelansicht-Anwendung in xcode, und fügen Sie einfach Folgendes CodeUIButton reagiert nicht auf Klick-Ereignis in UITableViewCell

//GRDViewController.h

#import <UIKit/UIKit.h> 

@interface GRDViewController : UIViewController <UITableViewDataSource, UITableViewDelegate> 

@property (nonatomic, strong) UIView* container; 
@property (nonatomic, strong) UIButton* button; 
@property (nonatomic, strong) UITableView* tableView; 
@property (nonatomic, strong) NSArray* arr; 

@end 

//GRDViewController.m

#import "GRDViewController.h" 

@implementation GRDViewController 
@synthesize button, container, arr, tableView; 

- (void)_btnTapped { 
NSLog(@"TAPPED"); 
} 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
    self.button = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 100, 100)]; 
    [self.button addTarget:self action:@selector(_btnTapped) forControlEvents:UIControlEventTouchUpInside]; 
    [self.button setTitle:@"CLICK ME" forState:UIControlStateNormal]; 
    self.arr = [[NSArray alloc] initWithObjects:@"123", @"456", @"678", nil]; 

    self.container = [[UIView alloc]initWithFrame:self.button.frame]; 
    [self.container addSubview:self.button]; 
    [self.view addSubview:self.container]; 
    //[self.view addSubview:self.button]; 

    self.tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 100, 400, 400)]; 

self.tableView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth; 
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 
    self.tableView.delegate = self; 
    self.tableView.dataSource = self; 

    [self.view addSubview:self.tableView]; 

self.tableView.backgroundColor = [UIColor redColor]; 





} 



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

    if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier]; 
     //cell.accessoryType = UITableViewCellAccessoryNone; 

     UIButton * btn = [[UIButton alloc]initWithFrame:CGRectMake(0, 0, 50, 50)]; 
     [btn addTarget:self action:@selector(_btnTapped) forControlEvents:UIControlStateNormal]; 
     [btn setTitle:[self.arr objectAtIndex:[indexPath row]]  forState:UIControlStateNormal]; 
    [cell.contentView addSubview:btn]; 
     } 

    return cell; 
} 
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { 
    return [self.arr count];  
} 
@end 

bitte helfen ich fühle mich dieser Fall in ios üblich sein sollte, aber niemand hat Lösung fo r das ???

bearbeiten: Wenn Sie auf die Schaltfläche es NSLog msg in der Xcode-Konsole druckt ... so sicher machen ... ur die Ergebnisse dort suchen ...

+0

Nur ein Vorschlag, aber warum nicht die Schaltfläche im Interface Builder erstellen und eine IBAction auf ihr TouchUpInside-Ereignis zuordnen? Könnte die Arbeit erleichtern. Haben Sie auch versucht, Gestenerkennung zu verwenden? Ich rate, dass der Container das Berührungsereignis zuerst erhält und nicht an seine Untersichten weiterleitet, weil möglicherweise sein Benutzerinteraktions-Flag deaktiviert ist. Tut mir leid, ich bin nicht mit meinem Mac richtig, aber hoffe, dieser Vorschlag hilft! – shawndreck

Antwort

7

Sie haben nicht gegeben jede Steuerereignis Taste .change es UIControlEventTouchUpInside von UIControlStateNormal

7

Statt UIControlStateNormal der Verwendung für ControlEvents UIControlEventTouchUpInside verwenden wie dieses

[btn addTarget:self action:@selector(_btnTapped) forControlEvents:UIControlEventTouchUpInside]; 
+0

danke ... für die Antwort war das Problem. Ich würde beide Antworten akzeptieren, wenn ich kann, ich wähle auch Ihre Antwort. – user1118019

1

versuchen dies zu tun:

[btn.titleLabel setUserInteractionEnabled: NO];