为什么UITableViewController不执行UITableView的代理方法

 我来答
千锋教育
2017-02-09 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
展开全部
就拿UITableView来说。将一个controller设置为它的代理。UITableView在绘制表的时候并不知道要绘制几个section和几个row。这个时候他就会向它的代理询问这些信息。这个时候在controller中的代理方法就会被执行。告诉UITableView去怎样的绘制。在绘制每个CELL的时候,UITableView也不知道应该怎样去绘制,这个时候它会去询问他的代理。代理方法再告诉它去绘制一个怎样的cell。也就是说代理方法是在View需要一些信息的时候在它的delegate中被执行的。这样主要是为了MVC的设计结构。就说tableView的dataSource代理中的,numberOfSectionsInTableView等代理函数,在转屏的时候肯定内部会调用,而在tableView的frame发生改变的时候,也对被调用。在Xcode中调试可以查看堆栈调用顺序:第一次初始化:#00x0000a0b2in-[ViewControllernumberOfSectionsInTableView:]at*******/ViewController.m:95#10x319742d0in-[UITableViewRowData(UITableViewRowDataPrivate)_updateNumSections]()#20x3197421cin-[UITableViewRowDatainvalidateAllSections]()#30x31988a48in-[UITableView(_UITableViewPrivate)_updateRowData]()#40x319888dain-[UITableViewnoteNumberOfRowsChanged]()#50x319884f8in-[UITableViewreloadData]()#60x3198671ain-[UITableViewlayoutSubviews]()#70x3194280ain-[UIView(CALayerDelegate)layoutSublayersOfLayer:]()#80x335a5d62in-[CALayerlayoutSublayers]()#90x335a5900inCA::Layer::layout_if_needed(CA::Transaction*)()#100x335d47a6in-[CALayerlayoutIfNeeded]()#110x319ec0d0in-[UIViewControllerwindow:setupWithInterfaceOrientation:]()#120x319eb2bcin-[UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:]()#130x319ea48ein-[UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:]()#140x319ea418in-[UIWindow_setRotatableViewOrientation:duration:force:]()#150x31b20180in__57-[UIWindow_updateToInterfaceOrientation:duration:force:]_block_invoke_0()#160x319a8680in-[UIWindow_updateToInterfaceOrientation:duration:force:]()#170x319a83c4in-[UIWindowsetAutorotates:forceUpdateInterfaceOrientation:]()#180x319a7d32in-[UIViewController_tryBecomeRootViewControllerInWindow:]()#190x3199eeaain-[UIWindowaddRootViewControllerViewIfPossible]()#200x3199aaecin-[UIWindow_setHidden:forced:]()#210x319dc1d0in-[UIWindowmakeKeyAndVisible]()#220x00009c36in-[AppDelegateapplication:didFinishLaunchingWithOptions:]()转屏调用堆栈:#00x0000a0b2in-[ViewControllernumberOfSectionsInTableView:]at*****/ViewController.m:95#10x319742d0in-[UITableViewRowData(UITableViewRowDataPrivate)_updateNumSections]()#20x3197421cin-[UITableViewRowDatainvalidateAllSections]()#30x319a9504in-[UITableViewsetFrame:]()#40x319a29d0in-[UIView(Geometry)_applyAutoresizingMaskWithOldSuperviewSize:]()#50x319a273ain-[UIView(Geometry)_resizeWithOldSuperviewSize:]()#60x31b2bb2ein-[UIScrollView_resizeWithOldSuperviewSize:]()#70x34b9baeein__NSArrayChunkIterate()#80x34b94a78in__NSArrayEnumerate()#90x34af6b6ain-[NSArrayenumerateObjectsWithOptions:usingBlock:]()#100x3195b0aain-[UIView(Geometry)resizeSubviewsWithOldSize:]()#110x319a34bain-[UIView(Geometry)setBounds:]()#120x31acad94in-[UIViewControllerwindow:willAnimateRotationToInterfaceOrientation:duration:]()#130x319eb2bcin-[UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:isRotating:]()#140x319ea48ein-[UIWindow_setRotatableClient:toOrientation:updateStatusBar:duration:force:]()#150x319ea418in-[UIWindow_setRotatableViewOrientation:duration:force:]()#160x31b20180in__57-[UIWindow_updateToInterfaceOrientation:duration:force:]_block_invoke_0()#170x319a8680in-[UIWindow_updateToInterfaceOrientation:duration:force:]()#180x319b1d2cin-[UIWindow_updateInterfaceOrientationFromDeviceOrientation:]()重新设置frame等:#00x0000a0b2in-[ViewControllernumberOfSectionsInTableView:]at***/ViewController.m:95#10x319742d0in-[UITableViewRowData(UITableViewRowDataPrivate)_updateNumSections]()#20x3197421cin-[UITableViewRowDatainvalidateAllSections]()#30x319a9504in-[UITableViewsetFrame:]()
大雅新科技有限公司
2024-11-19 广告
这方面更多更全面的信息其实可以找下大雅新。深圳市大雅新科技有限公司从事KVM延长器,DVI延长器,USB延长器,键盘鼠标延长器,双绞线视频传输器,VGA视频双绞线传输器,VGA延长器,VGA视频延长器,DVI KVM 切换器等,优质供应商,... 点击进入详情页
本回答由大雅新科技有限公司提供
就烦条0o
2018-07-06 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46492
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
1.在所在的.h文件中的
@interface XXXViewController : XXXViewController 后面加上“<UITableViewDataSource,UITableViewDelegate>”

2.在.m中设置代理
你的tableView.delegate = self;
你的tableView.dataSource = self;

这样tableview的代理方法就可以执行了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式