创建TableViewController和UIViewController都从一个BaseViewController继承
我有五个视图控制器都从一个基本视图控制器继承。我的baseVC包含共享功能,例如启动或停止活动idnicator或检查Internet活动。风险投资看起来像下面创建TableViewController和UIViewController都从一个BaseViewController继承
class BaseVC: UIViewController { }
class NewsFeedVC: BaseViewController { }
class MakePostVC: BaseViewController { }
class NotificationVC: BaseViewController { }
class MoreVC: BaseViewController { }
class CollectionVC: BaseViewController { }
我NewsFeedVC和NotificaitionVC(从故事板)是由正常的UIViewController构建了的tableView狼狈不堪。因此,这所有的作品。不过,我正考虑将这两个VC从故事板改为UITableViewController,而不是将tableView拖入viewController。原因是因为拉刷新周围有一些错误,如果tableView是在UIViewcontroller内部构造的,导致tableView跳转。但是,如果NewsFeedVC和NotificationVC继承自下面的UItableViewController,我将无法再使用BaseVC中的函数。我如何构造这个来实现我的愿望?
class NewsFeedVC: UITableViewController { }
class MakePostVC: UITableViewController { }
安装协议在BaseViewController
与您希望NewsFeedVC
类继承,然后使用委托
在你给他们打电话BaseVC添加此功能: - 在
prtotocol baseVCDelegate{
func activityIndic()
func checkInternetConnect()
}
class BaseVC : UIViewController{
....
var delegate : baseVCDelegate!
....
..
func activityIndic(){
..
..
}
..
func checkInternetConnect(){
..
..
}
}
您NewsFeedVC
申明类型变量BaseVC
var baseVCHandler : BaseVC = BaseVC()
转让其委托中自viewDidLoad()
baseVCHandler.delegate = self
然后访问您的协议符合所有功能!
PS: - 通过这个https://en.wikipedia.org/wiki/Multiple_inheritance#The_diamond_problem,可能会帮助你理解为什么swift不喜欢钝的多继承类,将清除你的基本知识。
创建UIViewController
一个extension
,并放置在extension
extension UIViewController{
func showActivityIndicator()
{
// write your code to show Activity Indicator
}
func hideActivityIndicator()
{
// write your code to hide Activity Indicator
}
func checkInternetConnection() -> Bool
{
return true // write your code to check connection
}
}
所有这些常用的方法来创建一个扩展Xcode的文件菜单 - >新建 - >文件 - >选择雨燕文件并将它命名为你的愿望。并为上述任何类创建扩展。
之后你可以调用这些方法像self.hideActivityIndicator()
我建议修复拉刷新的bug,而不是与你的结构失踪了的。我使用拉来在UIViewController
刷新,其中UITableView
没有问题。
refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector(refresh:) forControlEvents:UIControlEventValueChanged];
[refreshControl setTintColor:[self.stylingDetails themeColor]];
[oppTableView addSubview:refreshControl];
- (void)refresh:(UIRefreshControl *)refresh {
}
注:
一个UITableViewController丢失了一个UIViewController具备的功能。 这可能会导致无法解决的新问题取决于控制器的 功能。
这将是理想!但是,您是否遇到此问题需要刷新?请参阅http://*.com/questions/31011734/why-uirefreshcontrol-jumping当你“缓慢”拉下tableview刷新时,你可以看到很多东西,最后tableView跳下20到30点 – user172902
你是什么意思,tableview跳转? – hasan83