2017-07-27 3 views
0

私は現在UIPageViewControllerを持っています。そして、同じページにとどまっている間に完了ブロックが終了すると、テキストを変更する必要があります。私はそれをこのようにやってみました:同じページに留まっている間にUIPageViewController内からラベルテキストを変更する方法はありますか?

func addChainedAnimationView (titleLabel: String, descriptionLabel: String){ 
// 
(completion: {(finished) in 
    DispatchQueue.main.sync { 
          self.label1?.text = titleLabel 

         } 
     }) 
} 

を私はエラーに

EXC_ BAD_命令を取得

これは、ビューコントローラが内蔵されている方法をあなたには、いくつかを無視することができますので、それを短くしていますですパラメータの:

public class WelcomePageView : UIView 
{ 
    public var animationStrings : [String]? 
    public var titleStrings: [String]? 
    public var descriptionStrings: [String]? 

    var index: Int = 0 
} 

    var label1 : UILabel? 
    var label2 : UILabel? 

    func buildViewControllerWithImage(titleString : String, titleString2 : String?, descriptionString: String, descriptionString2: String?, backgroundImage: String, jsonFile : String, jsonFile2 : String?, index : Int, loopCount: Int, userType: User, isLottieChained: Bool) -> UIViewController 
    { 

    let vc : UIViewController = UIViewController(nibName: "WelcomePageView", bundle: Bundle(for: type(of: self))) 
     (vc.view as? WelcomePageView)!.index = index 
     vc.view.frame = self.view.frame 
     var paragraphStyle = NSMutableParagraphStyle() 

    var label1String = titleString 
     if(!(label1String.contains("\n"))) { 
      label1String = "\n"+label1String 
     } 
     paragraphStyle = NSMutableParagraphStyle() 
     paragraphStyle.lineSpacing = 0 
     paragraphStyle.alignment = .center 
     paragraphStyle.minimumLineHeight = 24 
     label1 = (vc.view.viewWithTag(2) as? UILabel)! 
     label1?.font = UIFont.CustomBold(size: 20) 

     var attrString = NSMutableAttributedString(string: label1String) 
     attrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, attrString.length)) 
     (vc.view.viewWithTag(2) as? UILabel)!.attributedText = attrString 
     return vc 
    } 

私はこれらの方法:

func getViewControllerWithImage(_ index: Int, userType: User, country: Country) -> UIViewController 

    { 
      vc = self.buildViewControllerWithImage(titleString:"FIRST_SCREEN_TITLE".localized, titleString2: nil, descriptionString: "FIRST_SCREEN_DESCRIPTION".localized, descriptionString2: nil, backgroundImage: "fractal_blue", jsonFile: "Welcome_Step_01_V01", jsonFile2: nil, index: index, loopCount: loopCount, userType: userType, isLottieChained: false) 

return vc 
    } 

彼らはここに呼ばれています。

public func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { 

    var index : Int = (viewController.view as? WelcomePageView)!.index // currentIndex = index 

//currentIndex = index 
//(viewController.view as? WelcomePageView)!.index 

print ("XXXXX after \(index) XXXXXXX ") 
//index = self.currentIndex 
index += 1 

if (index == maxPages) 
{ 
    index = 0 
} 
return self.getViewControllerWithImage(index, userType: User.newUser, country: 

checkCountry()) 
} 

答えて

0

私はあなたの問題がDispatchQueue.mainにsync代わりのasyncを呼び出すことが可能と考えています。

すでにメインキューに入っているので、メインキューが待機しているデッドロックが発生するため、同期を呼び出すことは絶対に避けてください。

関連する問題