3
class oneViewController: UIViewController{
   let sv = UIScrollView();
   override func viewDidLoad() {
   super.viewDidLoad();

   sv.frame = CGRectMake(0, 100, screenWidth, screenHeight);
   sv.backgroundColor = UIColor.clearColor();
   sv.contentSize = CGSize(width: sv.frame.size.width*3 ,height: sv.frame.size.height);
   sv.delegate = self;
   scrollToContentOffsetX(screenWidth);
   self.view.addSubview(sv);
   }


  func scrollToContentOffsetX(offsetX:CGFloat) {

       sv.contentOffset.x = offsetX;
  }
}

我可以滚动 UIScrollView,它工作。但我从另一个视图调用,它不工作。

class anthorView: UIView{

    override init (frame : CGRect)
    {

    super.init(frame : frame)

      let btnForget = UIButton(frame: CGRectMake(screenWidth-155, txtPWD.frame.origin.y+txtPWD.frame.size.height+5, 70, 30));
      btnForget.setTitle("Forget", forState: UIControlState.Normal);
      btnForget.setTitleColor(UIColor.blackColor(), forState: UIControlState.Normal);
      btnForget.addTarget(self, action: #selector(btnForget_Click), forControlEvents: .TouchUpInside);
      btnForget.titleLabel!.font = UIFont.systemFontOfSize(14);
      btnForget.backgroundColor = UIColor.clearColor();
      self.addSubview(btnForget);
    }

func btnForget_Click(sender: AnyObject) {

    oneViewController().scrollToContentOffsetX(0);

  }
} 

我有断点,两者都有 go func scrollToContentOffsetX(offsetX:CGFloat)。谁可以帮助我并为我的英语感到难过

4

1 回答 1

3

@AminNegm-Awad 指出的代码中的问题:在btnForget_Click您创建 的全新实例时oneViewController,它永远不会出现在屏幕上,并且与 exists 没有任何联系oneViewController。您需要有指向您的实例中现有实例的oneViewController指针anthorView。视图与控制器“对话”的常用方式是协议委托。自己阅读;在这里,我将提供另一种关闭的解决方案。anthorView无论如何,您需要anthorViewInstanceoneViewController. 这是您需要添加到类中的更改

类 anthorView:

var offsetClosure: (CGFloat -> ())?

func btnForget_Click(sender: AnyObject) {
    // delete previous implementation
    offsetClosure?(0)
}

oneViewController 类:

var anthorViewInstance: anthorView!

override func viewDidLoad() {
    super.viewDidLoad()

    // some your code...

    // next line is initialization of anthorView, do it in other place if you wish
    anthorViewInstance = anthorView(frame: CGRectZero)
    anthorViewInstance.offsetClosure = 
        {
             [weak self]
             offsetX in
             self?.scrollToContentOffsetX(offsetX)
        }    
}

此外,可以根据您的情况执行此解决方案的本地案例。anthorView您可以直接从视图控制器设置按钮操作。为此,将按钮声明为属性anthorView

类 anthorView:

var btnForget: UIButton!

super.init(frame : frame) {
    btnForget = UIButton(frame: CGRectMake(screenWidth-155, txtPWD.frame.origin.y+txtPWD.frame.size.height+5, 70, 30))

    // ... other init code

    // remove btnForget.addTarget line
}

// move btnForget_Click method to view controller

oneViewController 类:

var anthorViewInstance: anthorView!

override func viewDidLoad() {
    super.viewDidLoad()

    // some your code...

    // next line is initialization of anthorView, do it in other place if you wish
    anthorViewInstance = anthorView(frame: CGRectZero)
    anthorViewInstance.btnForget.addTarget(self, action: #selector(btnForget_Click), forControlEvents: .TouchUpInside)  
}

func btnForget_Click() {
    scrollToContentOffsetX(0)
}
于 2016-07-07T11:44:30.263 回答