0

У меня есть UITableView с некоторыми сложными клетками,UITableView перезагружается, когда presentviewcontroller или pushviewcontroller

Если я presentviewcontroller или pushviewcontroller, когда я нажимаю кнопку в ячейке,

будет перезагружать данные автоматически,

как я могу остановить его?

это базовый контроллер

import UIKit 

class Controller: UIViewController{ 
    override func viewDidLoad() { 
     super.viewDidLoad(); 

     initView(); 
    } 

    func initView(){ 
     self.view.backgroundColor = UIColor.whiteColor(); 
    } 

    override func preferredStatusBarStyle() -> UIStatusBarStyle { 
     return UIStatusBarStyle.LightContent; 
    } 
} 

и это второй уровень

import Foundation 

class LoadableController: Controller { 

    var requestNum      : Int = 0; 

    func loadData(complete: (()->Void)? = nil){ 
     self.requestComplete(); 
    } 

    func requestComplete(){ 
     if(self.requestNum == 0){ 
      requestFinished(); 
      return; 
     } 
     self.requestNum = self.requestNum > 0 ? self.requestNum - 1 : 0; 
     if(self.requestNum == 0){ 
      requestFinished(); 
     } 
    } 

    func requestFinished(){} 
} 

это третий уровень

class TableListViewController: LoadableController, UITableViewDelegate, UITableViewDataSource { 

    var tableView   : UITableView?; 
    var curPage    : Int = 0; 
    var totalPage   : Int = 0; 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func initView() { 
     super.initView(); 

     tableView = UITableView(); 
     tableView!.delegate = self; 
     tableView!.dataSource = self; 
     tableView!.delaysContentTouches = false; 
     tableView!.canCancelContentTouches = true; 
     self.view.addSubview(tableView!); 
     tableView!.snp_makeConstraints { [unowned self](make) in 
      make.edges.equalTo(self.view); 
     } 

     let header = EGRefresh(refreshingTarget: self, refreshingAction: #selector(self.loadData)); 
     header.setImages(Global.LOADING_IMAGES, duration: 0.16, forState: .Idle); 
     header.setImages(Global.LOADING_IMAGES, duration: 0.16, forState: .Pulling); 
     header.setImages(Global.LOADING_IMAGES, duration: 0.16, forState: .WillRefresh); 
     header.setImages(Global.LOADING_IMAGES, duration: 0.16, forState: .Refreshing); 
     header.lastUpdatedTimeLabel.hidden = true; 
     tableView!.mj_header = header; 

     let footer = MJRefreshBackNormalFooter.init(refreshingTarget: self, refreshingAction: #selector(self.loadNext)); 
     tableView!.mj_footer = footer; 
    } 

    func loadNext(){ 
     tableView!.mj_footer.endRefreshing(); 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCellWithIdentifier("ListCell", forIndexPath: indexPath); 
     return cell; 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 1; 
    } 

    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1; 
    } 

    override func requestFinished() { 
     tableView!.mj_header.endRefreshing(); 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    deinit{ 
     DDLogInfo("TableListViewController deinit"); 
    } 

} 

и здесь место, где TableView перезарядка автоматически.

import UIKit 

class CircleViewController: TableListViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad(); 
    } 

    override func initView(){ 
     super.initView(); 

     self.title = "Circle"; 

     let items = ["One", "Two"]; 
     let segment = UISegmentedControl(items: items); 
     segment.selectedSegmentIndex = 0; 
     segment.setWidth(80, forSegmentAtIndex: 0); 
     segment.setWidth(80, forSegmentAtIndex: 1); 
     self.navigationItem.titleView = segment; 

     tableView!.estimatedRowHeight = 50; 
     tableView!.rowHeight = UITableViewAutomaticDimension; 
//  tableView!.contentInset = UIEdgeInsetsMake(Dimens.TopBarHeight, 0, 0, 0); 
     tableView!.registerClass(TextOnlyCell.self, forCellReuseIdentifier: "CircleTextOnlyCell"); 
     tableView!.registerClass(ImageAndPageCell.self, forCellReuseIdentifier: "CircleImageAndPageCell"); 

     Event.addEventListener(self, selector: #selector(self.goComment(_:)), name: EventType.CIRCLE_COMMENT, object: nil); 
    } 

    func goComment(ns: NSNotification) { 
     let commentView = PostCommentViewController(); 
     self.navigationController?.pushViewController(commentView, animated: true); 
    } 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return UITableViewAutomaticDimension; 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return 10; 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     tableView.deselectRowAtIndexPath(indexPath, animated: true); 
    } 

    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1; 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
     var cell = tableView.dequeueReusableCellWithIdentifier("CircleImageAndPageCell", forIndexPath: indexPath) as? ImageAndPageCell; 
     if cell == nil { 
      cell = ImageAndPageCell.init(style: .Default, reuseIdentifier: "CircleImageAndPageCell"); 
     } 
     let images = [UIImage(named: "b.jpg")!, UIImage(named: "a.jpg")!, UIImage(named: "c.jpg")!, UIImage(named: "a.jpg")!]; 
     cell?.initView(nil, nickname: "im a nickname", time: "10 min", content: NSMutableAttributedString(string: "asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdf"), likeNum: 10, commentNum: 12, shareNum: 13, totalLine: 20, images: images, cellIndex: indexPath.row, hasPage: true, pageIcon: UIImage(named: "c.jpg")!, titleStr: "ahahaha"); 
     return cell!; 
    } 

    override func loadData(complete: (() -> Void)?) { 
     self.requestComplete(); 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    deinit { 
     Event.removeAllEventListener(self); 
     DDLogInfo("CircleViewController deinit"); 
    } 
} 

Если goComment назвать,

ViewController будет выталкиваться,

тогда TableView будет прыгать вверх,

добавить точку останова в cellForRowAtIndexPath,

это называется.

тогда я попробовал presentviewcontroller,

эта проблема также произошло,

хотя я сделал presentviewcontroller во внешнем ViewController.


это, похоже, не перезагружать данные,

это просто прокручивается к вершине.

+0

Сообщите нам, пожалуйста, код, и мы можем помочь вам лучше. –

+0

@DiogoAntunes У меня есть редактирование моего сообщения, помощь plz, спасибо! –

ответ

0

это выглядит как табличном не принимая размеры UIToolbar (44 баллов) в счет

Сохраните TableView смещение в prepareForSegue: (сохранить его в свойстве CGPoint)

self.tableViewScrollOffset = self.tableView .contentOffset;

Затем, в поле зренияWillAppear :, проверьте, было ли оно изменено. Если да, восстановите его.

если (self.tableView.contentOffset.y = self.tableViewScrollOffset.y!) { [self.tableView setContentOffset: self.tableViewScrollOffset]; self.tableViewScrollOffset = CGPointZero; }

+0

похоже на ошибку от ios 8.0 до 8.2 –

Смежные вопросы