如果没有在objective-c中进行多重继承,那么最优雅的方法是什么?

时间:2013-06-27 13:47:46

标签: objective-c

基本上我有一些对象类,其主要功能是充当tableView Delegate。

我想将其添加到某个超类中。当然只有一个超类,我需要灵活性。如果后者我想随意将此功能添加到其他类中呢?

基本上这些是用于处理用户可以删除或重新排列行等的表的代码。

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

    NSAssert(false, @"Should be called at child View");
    return nil;
}



-(Class) classBookmarked
{
    assert(false);
    return nil;
}


-(void) setEditing:(BOOL)editing animated:(BOOL)animated
{
    [self.delegate.tvDelegated setEditing:editing animated:animated];

    if (!editing)
    {
        NSArray * newIds = _arManagedObjectArray.convertArrayOfNSManagedObjectToItsDefaultSelector;

        [self varManagedObjectArrayUpdated];
        [BGBookmarkStorer vReportBookmarkStatusToServer:newIds Flag:@"update" withClass:self.classBookmarked];
    }
}


- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSUInteger row = indexPath.row;
    [self deleteARow:row];

}

-(void)deleteARow:(NSUInteger) row
{
    NSIndexPath * indexPath = [NSIndexPath indexPathForRow:row inSection:0];
    [_arManagedObjectArray removeObjectAtIndex:row];
    [self.delegate.tvDelegated deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
    [self varManagedObjectArrayUpdated];
}

-(void) varManagedObjectArrayUpdated
{
    [self.bookmarkStorer vUpdateBookMarkIDwithArray:_arManagedObjectArray];
    [self.delegate vUpdateNumberOfStuffs];

}

-(BGBookmarkStorerForPlacesandCatalog *) bookmarkStorer
{
    assert(false);
    return nil;
}

- (NSArray*) theBookmarkedIDs
{
    return self.bookmarkStorer.bookmarkedIDs;

}
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath
{
    NSMutableArray *  mutableBusinessBookmarked= _arManagedObjectArray;
    NSManagedObject *bizOrCatToMove = mutableBusinessBookmarked[sourceIndexPath.row];
    [mutableBusinessBookmarked removeObjectAtIndex:sourceIndexPath.row];
    [mutableBusinessBookmarked insertObject:bizOrCatToMove atIndex:destinationIndexPath.row];
    //_arManagedObjectArray=mutableBusinessBookmarked;
    [self varManagedObjectArrayUpdated];
}

- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewCellEditingStyleDelete;
}

2 个答案:

答案 0 :(得分:2)

创建uitableviewcontroller的子类。在那里实现所有功能。将它用作所有视图控制器的超类。

答案 1 :(得分:1)

如果我理解正确,你需要一个实用的地方,你可以把它放在你的表视图控制器中,对吧? 如果是这样,只需在UITableViewController上创建一个类别并将代码放在那里; - )