2017-07-27 1 views
0

Ich habe derzeit einen UIPageViewController und ich brauche es, um Text zu ändern, sobald ein Abschlussblock beendet wird, während er auf der gleichen Seite bleibt. Ich habe versucht, es auf diese Weise tun:Gibt es eine Möglichkeit, einen Etikettentext innerhalb eines UIPageViewControllers zu ändern, während er auf derselben Seite bleibt?

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

         } 
     }) 
} 

aber ich erhalte eine Fehlermeldung

EXC_ BAD_ BETRIEB

Dies ist, wie die View-Controller gebaut werden, es verkürzt ist, so dass Sie einige außer Acht lassen können der Parameter:

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 
    } 

ich sie auf diese Weise erhalten:

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 
    } 

Sie sind hier genannt:

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()) 
} 

Antwort

0

Ich glaube, Ihr Problem sync anrufen können anstelle von async auf DispatchQueue.main.

Sie befinden sich bereits in der Hauptwarteschlange, daher sollten Sie niemals sync aufrufen, da dies zu einem Deadlock führt, bei dem die Hauptwarteschlange auf sich selbst wartet.

Verwandte Themen