有没有办法在保持在同一页面上的同时从 UIPageViewController 中更改标签文本?
Posted
技术标签:
【中文标题】有没有办法在保持在同一页面上的同时从 UIPageViewController 中更改标签文本?【英文标题】:Is there a way to change a label text from within a UIPageViewController while staying on same page? 【发布时间】:2017-07-27 16:09:07 【问题描述】:我目前有一个 UIPageViewController,我需要它在完成块完成后更改文本,同时保持在同一页面上。我试过这样做:
func addChainedAnimationView (titleLabel: String, descriptionLabel: String)
//
(completion: (finished) in
DispatchQueue.main.sync
self.label1?.text = titleLabel
)
但我得到一个错误
EXC_ BAD_ INSTRUCTION
这就是视图控制器的构建方式,它被缩短了,所以你可以忽略一些参数:
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())
【问题讨论】:
【参考方案1】:我相信您的问题可能是在 DispatchQueue.main 上调用 sync
而不是 async
。
你已经在主队列中,所以你永远不应该调用同步,因为它会导致主队列自己等待的死锁。
【讨论】:
以上是关于有没有办法在保持在同一页面上的同时从 UIPageViewController 中更改标签文本?的主要内容,如果未能解决你的问题,请参考以下文章