[英]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.