2013-07-22 14 views
5

Ich habe eine benutzerdefinierte TableCell und ein UiButton ist über IB zugeordnet. Aber die Schaltfläche Aktionsmethode auf die Schaltfläche Index als NullSchaltfläche in einem benutzerdefinierten uitableviewcell funktioniert nicht

Im Folgenden immer wieder zurückkehren ist mein Code

//Inside CellForRow 
[cell.M_CtrlBtnChat addTarget: self 
         action: @selector(buttonPressed:withEvent:) 
      forControlEvents: UIControlEventTouchUpInside]; 


- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event 
{ 

    UITouch * touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView: self.tableView]; 
    NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location]; 
    NSLog(@"%d", indexPath.row); 
} 

Hier immer Indexpfad Null zurück. Irgendeine Idee. Bitte helfen Sie mir

+0

Was ist 'self'? Ihre Tabellenansichtszelle? Hat es eine Eigenschaft 'tableView'? Was passiert wenn du 'NSLog (@"% @ ", self.tableView)'? – Cyrille

+0

Erinnern Sie sich daran, dass Sie einen IndexPath direkt einer Tabellenansichtszelle zuordnen können, indem Sie verknüpfte Objekte verwenden. – Cyrille

+0

@Vishnu Hast du meine Antwort versucht? –

Antwort

1
- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event 
{ 
    CGPoint touchPoint = [sender convertPoint:CGPointZero toView:self.mMessagesTable]; 
    NSIndexPath *indexPath = [self.mMessagesTable indexPathForRowAtPoint:touchPoint]; 
    NSLog(@"%d", indexPath.row); 
} 

Code für Schaltfläche programmatisch

UIButton *mNewMsgDwn = [UIButton buttonWithType:UIButtonTypeCustom]; 
[mNewMsgDwn setImage:[UIImage imageNamed:@"new_message.png"] forState:UIControlStateNormal]; 
[mNewMsgDwn addTarget:self action:@selector(newMsg) forControlEvents:UIControlEventTouchUpInside]; 
mNewMsgDwn.frame = CGRectMake(179, 357, 137, 27); 
[self.view addSubview:mNewMsgDwn]; 
+0

versucht, aber es gibt auch immer Null .. Ich denke, das Problem ist, ich hatte die Schaltfläche über Ib in meiner benutzerdefinierten Zelle hinzugefügt , wie zu lösen? ?? – Vishnu

+0

Funktioniert für mich, Danke @iPhone 6 –

5
[cell.M_CtrlBtnChat addTarget: self 
         action: @selector(buttonPressed:withEvent:) 
      forControlEvents: UIControlEventTouchUpInside]; 
cell.M_CtrlBtnChat.tag = indexPath.row; 


- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event 
{ 

    UIButton *btn = (UIButton *)sender; 
    NSLog(@"btn.tag %d",btn.tag); 
    UITouch * touch = [[event allTouches] anyObject]; 
    CGPoint location = [touch locationInView: self.tableView]; 
    NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location]; 
    NSLog(@"%d", indexPath.row); 
} 

versuchen, dies es Ihnen helfen kann.

+0

Gute Antwort .... –

+0

@DharmbirChoudhary danke :) –

+0

@Divz können Sie bitte geben Sie mir für beide NSLog (@ "btn.tag% d", btn.tag); und NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: location]; ...? beide sind nicht gleich .. Wert kommt? –

0

es ausprobieren diesen Balg Code ..

- (void) buttonPressed: (id) sender withEvent: (UIEvent *) event 
{ 
    UIButton *button = (UIButton *)sender; 
    UITableViewCell *cell = (UITableViewCell *)button.superview; 
    UITableView *tableView = (UITableView *)cell.superview; 
    NSIndexPath *indexPath = [self.tableView indexPathForCell:cell]; 
    NSLog(@"%d", indexPath.row); 
} 

ODER

UIButton *button = (UIButton *)sender; 
CGRect buttonFrame = [button convertRect:button.bounds toView:self.tableView]; 
NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonFrame.origin]; 

OR Ganze Beispiel mit Add benutzerdefinierte Schaltfläche in der Zelle programmatisch

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     ....... 
    cell.textLabel.text = [NSString stringWithFormat:@"Cell #%i", indexPath.row + 1]; 

    //Create the button and add it to the cell 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [button addTarget:self 
       action:@selector(customActionPressed:) 
    forControlEvents:UIControlEventTouchDown]; 
    [button setTitle:@"Custom Action" forState:UIControlStateNormal]; 
    button.frame = CGRectMake(150.0f, 5.0f, 150.0f, 30.0f); 
    [cell addSubview:button]; 

    return cell; 
} 

und erhalten Index-Pfad mit Balg-Code ...

//Get the superview from this button which will be our cell 
UITableViewCell *tblCell = (UITableViewCell*)[sender superview]; 

//From the cell get its index path. 
NSIndexPath *indexPathE = [myTableView indexPathForCell:tblCell]; 
NSLog(@"%d", indexPathE.row); 
+0

funktioniert diese Antwort @Vishnu zu versuchen und lassen Sie mich wissen ... –

+0

leider nicht funktioniert. – Vishnu

+0

oh jetzt sehe ich deine frage und dafür sehe ich meine andere linkoption für diese anforderung http: // stackoverflow.com/Fragen/2863940/wie-can-i-halten-Track-of-the-Index-Pfad-of-a-button-in-a-table-View-Zelle sieht diese andere Antwort .. –

1

Ich hatte das gleiche Problem und versuchte alles. Die Sache, die es schließlich tat, war die Durchführung des Verfahrens

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

einfach zurückgeben, was die Höhe der benutzerdefinierten Zelle ist (Blick in die NIB-Datei)

Verwandte Themen