簡體   English   中英

獲取tableview行的索引路徑

[英]Getting indexpath of tableview row

我在tableView的單元格內有M13Checkbox。 當用戶選中此復選框時,我想在核心數據中保存一些數據

- (IBAction)completed:(M13Checkbox *)sender {


    NSDate *now = [NSDate date];
    NSNumber *yes = [NSNumber numberWithBool:YES];

    NSManagedObjectContext *context = [self managedObjectContext];

    NSManagedObject *selectedHabit = [self.habits objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
    self.habit = selectedHabit;

    NSNumber *habitID = [self.habit valueForKey:@"habitID"];

    NSNumber *habitRepeats = [self.habit valueForKey:@"habitRepeats"];

    //getting number of habit reoeats for Smart habits function
    int i = [habitRepeats intValue] + 1;
    NSNumber *repeats = [NSNumber numberWithInt:i];
    [self.habit setValue:repeats forKey:@"habitRepeats"];

    //saving completion to core data
    NSManagedObject *habitForDate = [NSEntityDescription insertNewObjectForEntityForName:@"HabitForDate" inManagedObjectContext:context];
    [habitForDate setValue:now forKey:@"date"];
    [habitForDate setValue:habitID forKey:@"habitID"];
    [habitForDate setValue:yes forKey:@"completed"];

    [context deleteObject:habitForDate];

     NSError *error = nil;
    if (![context save:&error]) {
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }

表格視圖中的Althoug習慣對於鍵“ habitID”具有不同的值,habitForDate始終將“ 1”作為“ habitID”的值,我認為問題出在代碼的下面,並且索引錯誤

 NSManagedObject *selectedHabit = [self.habits objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
    self.habit = selectedHabit;

我的問題是,如何獲取復選框被選中的單元格的indexPath

- (IBAction)completed:(M13Checkbox *)sender {
    UITableViewCell * cell = [[sender superView] superView]; // if you added it to cell's content view.
    NSIndexPath *indexPath = [self.tableview indexPathForCell:cell];

    ....
}

我這樣做的方法之一是使用類別UIView + Data.h並將附加的數據附加到它。

#import "UIView+Data.h"
#import <objc/runtime.h>

const char * const viewUserDataKey = "view.userData";
@implementation UIView (Data)
- (id)userData {
    return objc_getAssociatedObject(self, viewUserDataKey);
}

- (void)setUserData:(id)userData {
    objc_setAssociatedObject(self, viewUserDataKey, userData, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end

另外,還有一個屬性@property (nonatomic, strong) id userData; 在頭文件中。

您可以在班級上導入以上類別,並將indexPath作為checkBox.userData = indexPath附加到單元格內部的checkBox.userData = indexPath我不確定這是否是理想的方法,但我的應用程序已在App Store中正常運行!

並且,在您的方法中,您可以將indexPath讀為

- (IBAction)completed:(M13Checkbox *)sender {
   NSIndexPath *indexPath = (NSIndexPath*)sender.userData;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM