好的,所以我决定将我的 UITableView委托的代码移到另一个类中。如果你愿意的话,是一个子类,一个子类,这样可以更容易地访问我的 Cellforrowwithindexpath 函数在所述子类中所做的所有元素。
但现在有一个小问题......
就 UItableView 而言,它运行正常但是当我尝试使用导航控制器将视图推到最顶层时,它无法正常工作,然后我发现自我...在我的主要课堂内实际上是我的子类的实例......什么?所以自我实际上并不等于自我...
任何人都可以给我任何见解,我在做什么这么大错?
编辑:所以我改为将其改为委托的子类,它运行正常,以防其他人遇到此问题,但我仍然感到困惑,为什么会发生这种情况首先......
代码:
@interface OpenGameList : MainMenuViewContoller <UITableViewDelegate,UITableViewDataSource>
{
}
@end
在我的 MainMenuViewController的viewDidLoad 函数中
_openGameList = [[OpenGameList alloc] init];
_openGameList.delegate = self;
friendsTable.delegate = _openGameList;
friendsTable.dataSource = _openGameList;
而且之后似乎在 MainMenuViewController 中使用self等于 OpenGameList ,因此使用[[fromView navigationController] pushViewController:toView animated:NO];
的原因不起作用
答案 0 :(得分:1)
self
总是指向实际实例化的对象 - 派生最多的类。
当你有一个子类的实例,并向self
发送消息时,如果有子类的实现将始终被调用。无论您是否在超类的实现文件或子类的实现文件中都无关紧要。
这是多态的必要条件:它允许子类覆盖父类的行为。以-[UIView drawRect:]
为例。要调用子类的绘图代码,当UIView
中的代码调用[self drawRect:]
时,它是需要调用的子类的绘图实现。
可能有助于记住,超类和子类不是父对象和子对象,而是应用于同一对象的越来越多的特定类型。 UITableView
也是UIScrollView
,UIView
和NSObject
,但是当你创建一个时,有一个对象就是所有这些东西,{ {1}}总是指那个。