2015-07-27 7 views
13

Voglio rilevare il pulsante fare clic su Vista tabella con più righe e sezioni. Sono stato in grado di ottenerlo in caso di una singola riga, ma ho avuto problemi che non ha rilevato la sezione corretta. ho avuto problemi di rilevare quale pulsante sezione ha premuto dall'utenteRileva clic sul pulsante nella vista tabella ios xcode per riga multipla e sezione

Di seguito è il codice aggiornato dopo problema è risolto

@property (strong,nonatomic) NSMutableArray* quantityArray; 
    @property (strong,nonatomic) NSMutableArray* rows; 

    @synthesize quantityArray,rows; 

    - (void)viewDidLoad { 
     [super viewDidLoad]; 
     quantityArray = [[NSMutableArray alloc] init]; 
     [self PluMinusFunction]; 
    } 


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

     if (addBtnClicked || minusBtnClicked) { 
     cell.lblCount.text = [[quantityArray objectAtIndex:indexPath.section-1]objectAtIndex:indexPath.row]; 
     addBtnClicked = NO; 
     minusBtnClicked = NO; 
     } 
     else 
     { 
      cell.lblCount.text = [[quantityArray objectAtIndex:indexPath.section-1]objectAtIndex:indexPath.row]; 

     } 

     cell.btnMinus.tag = indexPath.row; 
     cell.btnPlus.tag = indexPath.row; 
     cell.lblCount.tag = indexPath.row; 

     [cell.btnPlus addTarget:self action:@selector(addItem:) forControlEvents:UIControlEventTouchUpInside]; 
     if ([ cell.lblCount.text integerValue]!=0) { 
      [cell.btnMinus addTarget:self action:@selector(deleteItem:) forControlEvents:UIControlEventTouchUpInside]; 
     } 
     return cell; 
    } 
} 

#pragma mark - Pluys Minus Button 

-(void) PluMinusFunction 
{ 
    for (int j=0; j <[itemArr count ]; j++) { 
     rows = [[NSMutableArray alloc] init]; 
     for (int i=0; i <[ [[itemArr objectAtIndex:j] objectForKey:@"itemList"]count]; i++) { 
      [rows insertObject:@"0" atIndex:i]; 
     } 
     [quantityArray insertObject:rows atIndex:j]; 
    } 
    [self sum]; 
} 


#pragma mark - UIButton selector 

-(void)addItem:(UIButton*)button 
{ 

    CGPoint touchPoint = [button convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *clickedButtonIndexPath = [self.tableView indexPathForRowAtPoint:touchPoint]; 

    NSInteger row = clickedButtonIndexPath.row; 
    NSInteger section = clickedButtonIndexPath.section; 

    NSInteger LabelText =[[[quantityArray objectAtIndex:section-1]objectAtIndex:row]integerValue]+1; 
    NSMutableArray *subArray = [quantityArray objectAtIndex:section-1]; 
    [subArray replaceObjectAtIndex:row withObject: [NSString stringWithFormat:@"%ld",(long)LabelText]]; 
    [quantityArray replaceObjectAtIndex:section-1 withObject: subArray]; 
    addBtnClicked = YES; 

    NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:row inSection:section]; 
    NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil]; 
    [self.tableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone]; 


} 



-(void)deleteItem:(UIButton*)button{ 

    CGPoint touchPoint = [button convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *clickedButtonIndexPath = [self.tableView indexPathForRowAtPoint:touchPoint]; 

    NSInteger row = clickedButtonIndexPath.row; 
    NSInteger section = clickedButtonIndexPath.section; 

    NSInteger LabelValue =[[[quantityArray objectAtIndex:section-1]objectAtIndex:row]integerValue]; 

    if (LabelValue>=1) { 
     NSInteger LabelText =[[[quantityArray objectAtIndex:section-1]objectAtIndex:row]integerValue]-1; 
     NSMutableArray *subArray = [quantityArray objectAtIndex:section-1]; 
     [subArray replaceObjectAtIndex:row withObject: [NSString stringWithFormat:@"%ld",(long)LabelText]]; 

     [quantityArray replaceObjectAtIndex:section-1 withObject: subArray]; 
     addBtnClicked = YES; 

     NSIndexPath* rowToReload = [NSIndexPath indexPathForRow:row inSection:section]; 
     NSArray* rowsToReload = [NSArray arrayWithObjects:rowToReload, nil]; 
     [self.tableView reloadRowsAtIndexPaths:rowsToReload withRowAnimation:UITableViewRowAnimationNone]; 
    } 


} 

voglio acheive come immagine qui sotto

enter image description here

sotto collegamento dare soluzione al mio problema troppo

Detecting which UIButton was pressed in a UITableView

risposta

38

Objective-C

-(void)addItem:(UIButton*) sender 
{ 

CGPoint touchPoint = [sender convertPoint:CGPointZero toView:mainTable]; // maintable --> replace your tableview name 
NSIndexPath *clickedButtonIndexPath = [mainTable indexPathForRowAtPoint:touchPoint]; 

NSLog(@"index path.section ==%ld",(long)clickedButtonIndexPath.section); 

NSLog(@"index path.row ==%ld",(long)clickedButtonIndexPath.row); 


} 

Swift3

func addItem(sender: UIButton) 
{ 
    var touchPoint = sender.convert(CGPoint.zero, to: self.maintable) 
    // maintable --> replace your tableview name 
    var clickedButtonIndexPath = maintable.indexPathForRow(at: touchPoint) 
    NSLog("index path.section ==%ld", Int(clickedButtonIndexPath.section)) 
    NSLog("index path.row ==%ld", Int(clickedButtonIndexPath.row)) 


} 

Swift2 e soprattutto

012.
func addItem(sender: UIButton) 
{ 
var touchPoint: CGPoint = sender.convertPoint(CGPointZero, toView: mainTable) 
    // maintable --> replace your tableview name 
var clickedButtonIndexPath: NSIndexPath = mainTable(forRowAtPoint: touchPoint) 
NSLog("index path.section ==%ld", Int(clickedButtonIndexPath.section)) 
NSLog("index path.row ==%ld", Int(clickedButtonIndexPath.row)) 
} 
+0

ho ottenuto il problema > in alcuni casi qualsiasi idee ab che bro –

+0

questo sta avvenendo nello scenario casuale, quale scenario u fronte –

+0

possibile controllare questa domanda http u : //stackoverflow.com/questions/31692692/what-could-we-do-in-case-of-custom-cell-in-viewforheaderinsection-to-reload-part –

1
Swift 3 

let clickedButtonIndexPath = self.tableView.indexPathForRow(at: touchPoint) 
     if(clickedButtonIndexPath != nil) 
     { 
      NSLog("index path.section ==%ld", Int(clickedButtonIndexPath!.section)) 
      NSLog("index path.row ==%ld", Int(clickedButtonIndexPath!.row)) 
      } 
Problemi correlati