2016-06-10 6 views
0

Mit dem folgenden Code, ich versuche, die Likes Video zu bekommen, ich bekomme die Anzahl in Array und ich möchte das auf eine Schaltfläche Titel alles funktioniert gut.Wie wird der Indexpfad zu einer Schaltfläche festgelegt?

Ich habe eine Schaltfläche Aktion und damit kann ich die Likes zählen auf diese Schaltfläche zeigen. Aber mein Problem ist, dass ich mit diesem Code die gleiche Anzahl wie in allen Clips in der Tabellenansicht bekomme, also möchte ich genau wie zählen für die jeweilige Schaltfläche erhalten, wie würde ich das tun.

// here is how i am getting like count 

- (void)getcat 
{ 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"ClipTable"]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ClipTable" inManagedObjectContext:self.managedObjectContext]; 

    fetchRequest.resultType = NSDictionaryResultType; 
    fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"total_likes"]]; 
    fetchRequest.returnsDistinctResults = YES; 

    NSArray *dictionaries = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil]; 
    NSLog (@"total_likes: %@",dictionaries); 

    [NSString stringWithFormat:@"%@",[dictionaries valueForKey:@"total_likes"]]; 

    self.devices =[[NSMutableArray alloc]init]; 
    self.devices=[dictionaries mutableCopy]; 
    NSLog(@"cat1 is%@",self.devices); 
} 

Und das ist, wie ich wie Graf bin Anzeige auf die Schaltfläche

- (IBAction)likeButtonAction:(id)sender 
{ 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[sender tag] inSection:0]; 
    NSManagedObject *managedObject = [self.devices objectAtIndex:indexPath.row]; 
    NSString *likes = [NSString stringWithFormat:@"%@",[managedObject valueForKey:@"total_likes"]]; 
    [sender setTitle:likes forState:UIControlStateNormal]; 
    } 

Code für cellForRowAtIndexPath ist unter diesem Code enthält nicht meine beliebige Taste Code auf die Schaltfläche Aktion likeButtonTapped getrennt ist

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { 
// Fetch Record 
NSManagedObject *record = [self.fetchedResultsController objectAtIndexPath:indexPath]; 

    //this button is different one 

UIButton *btn=[[UIButton alloc]initWithFrame:CGRectMake(208,96, 100, 30)]; 
[btn addTarget:self action:@selector(yourButtonClicked:) forControlEvents:UIControlEventTouchUpInside];  btn.tag = indexPath.row; 
[btn setImage:[UIImage imageNamed:@"btn-details.png"] forState:UIControlStateNormal]; 
[cell.contentView addSubview:btn]; 

NSLog(@"sender.tag cell is%ld ",(long)btn.tag); 

    } 

    see my debugger output 
    indexpath is0 
    2016-06-10 19:20:31.435 freejournlaist[4159:134867] indexpath is4 
    2016-06-10 19:20:31.436 freejournlaist[4159:134867] sender.tag cell is4 
    2016-06-10 19:20:33.351 freejournlaist[4159:134867] indexpath is5 
    2016-06-10 19:20:33.352 freejournlaist[4159:134867] sender.tag cell is5 
    2016-06-10 19:20:34.140 freejournlaist[4159:134867] indexpath is6 
    2016-06-10 19:20:34.141 freejournlaist[4159:134867] sender.tag cell is6 
2016-06-10 19:20:35.506 freejournlaist[4159:134867] indexpath is7 
2016-06-10 19:20:35.507 freejournlaist[4159:134867] sender.tag cell is7 
2016-06-10 19:20:35.888 freejournlaist[4159:134867] indexpath is8 
2016-06-10 19:20:35.889 freejournlaist[4159:134867] sender.tag cell is8 
2016-06-10 19:20:36.139 freejournlaist[4159:134867] indexpath is9 
2016-06-10 19:20:36.140 freejournlaist[4159:134867] sender.tag cell is9 
2016-06-10 19:20:36.475 freejournlaist[4159:134867] indexpath is10 
2016-06-10 19:20:36.476 freejournlaist[4159:134867] sender.tag cell is10 
2016-06-10 19:20:38.201 freejournlaist[4159:134867] indexpath is6 
2016-06-10 19:20:38.202 freejournlaist[4159:134867] sender.tag cell is6 
2016-06-10 19:20:38.701 freejournlaist[4159:134867] indexpath is5 
2016-06-10 19:20:38.702 freejournlaist[4159:134867] sender.tag cell is5 
2016-06-10 19:20:39.267 freejournlaist[4159:134867] indexpath is4 
2016-06-10 19:20:39.268 freejournlaist[4159:134867] sender.tag cell is4 
2016-06-10 19:20:40.684 freejournlaist[4159:134867] indexpath is3 
2016-06-10 19:20:40.685 freejournlaist[4159:134867] sender.tag cell is3 
2016-06-10 19:20:40.837 freejournlaist[4159:134867] indexpath is2 
2016-06-10 19:20:40.839 freejournlaist[4159:134867] sender.tag cell is2 
2016-06-10 19:20:41.152 freejournlaist[4159:134867] indexpath is1 
2016-06-10 19:20:41.153 freejournlaist[4159:134867] sender.tag cell is1 
2016-06-10 19:20:41.952 freejournlaist[4159:134867] indexpath is0 
2016-06-10 19:20:41.954 freejournlaist[4159:134867] sender.tag cell is0 
2016-06-10 19:21:02.915 freejournlaist[4159:134867] indexpath is3 
2016-06-10 19:21:02.916 freejournlaist[4159:134867] sender.tag cell is3 

2016-06-10 19:55:38.055 freejournlaist[4326:144151] total_likes: (
      { 
      "total_likes" = 1; 
      }, 
      { 
      "total_likes" = 5; 
      }, 
      { 
    "total_likes" = 2; 
    }, 
    { 
    "total_likes" = 0; 
    }, 
    { 
    "total_likes" = 4; 
    }, 
    { 
    "total_likes" = 3; 
    }, 
    { 
    "total_likes" = 6; 
    }, 
    { 
    "total_likes" = 115; 
    } 
    ) 
    2016-06-10 19:55:38.055 freejournlaist[4326:144151] cat1 is(
    { 
    "total_likes" = 1; 
    }, 
    { 
    "total_likes" = 5; 
    }, 
    { 
    "total_likes" = 2; 
    }, 
    { 
    "total_likes" = 0; 
    }, 
    { 
    "total_likes" = 4; 
    }, 
    { 
    "total_likes" = 3; 
    }, 
    { 
    "total_likes" = 6; 
    }, 
    { 
    "total_likes" = 115; 
    } 
+1

wo u dieser Schaltfläche likeButtonAction genannt –

+1

in einem tabelView Individuellen Handy @Anbu .Karthik – vicky

+0

NSLog die '[Absender-Tag]' und sehen, was es gibt .. – NSPratik

Antwort

0

Sie haben wahrscheinlich vergessen, eine tag für jede Schaltfläche festzulegen.

können Sie legen ein tag entweder programmatisch oder mit Storyboard


bearbeiten

Voll Code:

- (void)getcat{ 

    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"ClipTable"]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ClipTable" inManagedObjectContext:self.managedObjectContext]; 

    fetchRequest.resultType = NSDictionaryResultType; 
    fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"total_likes"]]; 
    fetchRequest.returnsDistinctResults = YES; 

    NSArray *dictionaries = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil]; 
    NSLog(@"total_likes: %@",dictionaries); 

    self.devices = [dictionaries mutableCopy]; 
    NSLog(@"cat1 is%@", self.devices); 
} 

- (IBAction)likeButtonAction:(id)sender { 

    NSManagedObject *managedObject = [self.devices objectAtIndex:sender.tag]; 

    NSString *likes = [NSString stringWithFormat:@"%@", [managedObject valueForKey:@"total_likes"]]; 

    [sender setTitle:likes forState:UIControlStateNormal]; 
} 
+0

was soll ich nach der Einstellung tun Tag auf Storyboard @ guidev – vicky

+0

@ guidev ich habe Taste ein Tag als 115 geben und jetzt stürzt die App sagen - [__ NSArrayM objectAtIndex:]: index 115 jenseits Grenzen [0 .. 7] ' – vicky

+0

das ist, weil self.devices hat nur 7 Elemente und du versuchst auf die 115 zuzugreifen. – guidev

0

Wenn du tust, was folgt, dann da sollte kein Problem sein ..

Andere alternative Schaltfläche Index zu erhalten ist:

-(IBAction)likeButtonAction:(id)sender 
{ 
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:yourTable]; 
    NSIndexPath *indexPath = [yourTable indexPathForRowAtPoint:buttonPosition]; 
    NSInteger rowIndex  = indexPath.row; 

    // Use this index path 
} 

Wenn Sie es mit dem Tag tun, konvertieren sender-UIButton Objekt wie folgt:

-(IBAction)likeButtonAction:(id)sender 
{  
    UIButton *button = (UIButton *)sender; 
    NSLog(@"%d", button.tag); 

    /* - - - - */ 
    /* - - - - */ 
} 
+0

Wenn ich Ihren Code unter der Überschrift Andere Alternative dann nur die ersten vier Clips bekommen die richtige Anzahl, die ist 1,5,0,2 und dann wiederholt sich diese Zahl wie 1,5,0,2, 1,5,0,2, 1,5,0,2, 1,5,0,2 wiederholt sich so @NSPratik – vicky

+0

Aber, wie Sie Knopf in die Tabellenansicht hinzufügen, zählt auch. Bitte zeigen Sie mir, wie Sie Button zu Zellen hinzufügen. – NSPratik

+0

Ich ziehe Knopf aus der Objektbibliothek und Drop in der Tabellenansicht und dann von dieser Schaltfläche IBAction erstellen mit Strg + Klick und Drag & Drop in viewControlle.h – vicky

0

I schreibe eine einfache Probe wie deine, es funktioniert.

diese Momentaufnahme, fließende Codes, Sie Schaltfläche Text enter image description here

Codes nach Taping eingestellt werden sehen:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.managedObjectContext = ((AppDelegate *)[UIApplication sharedApplication].delegate).managedObjectContext; 
    [self getcat]; 
} 

- (void)getcat { 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"ClipTable"]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ClipTable" inManagedObjectContext:self.managedObjectContext]; 

    fetchRequest.resultType = NSDictionaryResultType; 
    fetchRequest.propertiesToFetch = [NSArray arrayWithObject:[[entity propertiesByName] objectForKey:@"total_likes"]]; 
    fetchRequest.returnsDistinctResults = YES; 

    NSArray *dictionaries = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil]; 
    NSLog (@"total_likes: %@",dictionaries); 

    [NSString stringWithFormat:@"%@",[dictionaries valueForKey:@"total_likes"]]; 

    self.devices =[[NSMutableArray alloc]init]; 
    self.devices=[dictionaries mutableCopy]; 
    NSLog(@"cat1 is%@",self.devices); 
} 

- (IBAction)likeButtonAction:(UIButton *)sender { 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[sender tag] inSection:0]; 
    NSManagedObject *managedObject = [self.devices objectAtIndex:indexPath.row]; 
    NSString *likes = [NSString stringWithFormat:@"%@",[managedObject valueForKey:@"total_likes"]]; 
    [sender setTitle:likes forState:UIControlStateNormal]; 
} 

#pragma mark - Table view data source 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return self.devices.count; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseid" forIndexPath:indexPath]; 

    // Configure the cell... 
    NSArray *subviews = cell.contentView.subviews; 
    for (UIView *subview in subviews) { 
     if ([subview isKindOfClass:[UIButton class]]) { 
      ((UIButton *)subview).tag = indexPath.row; 
     } else if ([subview isKindOfClass:[UILabel class]]) { 
      NSManagedObject *managedObject = [self.devices objectAtIndex:indexPath.row]; 
      NSString *likes = [NSString stringWithFormat:@"%@",[managedObject valueForKey:@"total_likes"]]; 
      ((UILabel *)subview).text = likes; 
     } 
    } 

    return cell; 
} 
+0

@ J.Hunter siehe meine Debugger-Ausgabe – vicky

+0

@vicky würden Sie bitte NSLog Ihre 'self.devices', nur jedes' [managedObject valueForKey: @ "total_likes"] ' –

+0

@ J. Hunter siehe total_likes Ausgabe – vicky

Verwandte Themen