- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
Swift 4:我正在使用 NSNotification post 并观察两个 View Controller 之间的对象。我的问题是更新观察给定接收到的对象的 viewController。
有两件事需要更新
1. 按钮的setTitle,
2. UIPageViewController 上的当前页面。
如何更新这两个东西?
我今天和昨天为此工作了一整天,但没有任何结果。
我试过使用 struct 来做更新和普通变量。
**YellowViewController - Observes -> Issue here**
let searchedReturnedKey = "Searched"
class YellowViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
let pageView = PageView()
let searched = Notification.Name(rawValue: searchedReturnedKey)
private var isAnimating = false
struct structure {
static var SearchedIndex = Int()
}
override func viewDidLoad() {
super.viewDidLoad()
dataSource = self
delegate = self
setupUIPageView()
setupNavigationBarItem()
createObserver()
}
func createObserver(){
NotificationCenter.default.addObserver(self, selector: #selector(YellowViewController.updateVerseView(notification:)), name: searched, object: nil)
}
@objc func updateVerseView(notification: NSNotification) {
print("Observed")
structure.SearchedIndex = notification.object as! Int
let chapterIndexLabel = doneModel.ChapterIndex
let verseList = doneModel.chapterVerses
let pageView = PageView()
// HERE IS MY ISSUE - booklabel.text and pageview.verses
bookLabel.text = chapterIndexLabel[structure.SearchedIndex]
pageView.verses = verseList[structure.SearchedIndex]
print(structure.SearchedIndex, "Index")
}
func setupUIPageView() {
let verseList = bibleModel.chapterVerses
let chapterIndexLabel = bibleModel.ChapterIndex
let pageViewControllers = [pageView] // Important! UIPageViewController sets ViewController in a list to enable swiping. - Understand this.
pageView.verses = verseList.first! // Important! Setups verses for first view.
bookLabel.text = chapterIndexLabel.first!
setViewControllers(pageViewControllers, direction: .forward, animated: true, completion: nil)
}
var bookLabel = UILabel()
func setupLeftNavItems() {
let bookButton = UIButton(type: .system)
bookButton.setTitle(bookLabel.text! + " 1", for: .normal)
bookButton.setTitleColor(goldColor, for: .normal)
bookButton.titleLabel?.font = UIFont(name: "AvenirNext-DemiBold", size: 18)
bookButton.addTarget(self, action: #selector(handleSearch), for: .touchUpInside)
// bookButton.frame = CGRect(x: 30, y: 0, width: 54, height: 34)
self.navigationItem.leftBarButtonItem = UIBarButtonItem(customView: bookButton)
}
@objc func handleSearch() { // Handles openeing SearchViewController
let searchViewController = SearchViewController()
let navController = UINavigationController(rootViewController: searchViewController)
present(navController, animated: true, completion: nil)
}
func pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController]) {
isAnimating = true
}
// Handles swiping right - To next chapter.
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
if isAnimating {
return nil
}
let verseList = bibleModel.chapterVerses
let currentVerseView = (viewController as! PageView).verses
let currentIndex = verseList.index(of: currentVerseView)
let chapterIndexLabel = doneModel.ChapterIndex
if currentIndex! < verseList.count - 1 {
let pageView = PageView()
pageView.verses = verseList[currentIndex! + 1 ]
bookLabel.text = chapterIndexLabel[currentIndex! + 1]
print("Swiped right")
setupLeftNavItems()
createObserver()
return pageView
}
return nil
}
// Handles swiping left - To previous chapter
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
if isAnimating {
return nil
}
let verseList = bibleModel.chapterVerses
let currentVerseView = (viewController as! PageView).verses
let currentIndex = verseList.index(of: currentVerseView)
let chapterIndexLabel = doneModel.ChapterIndex
if currentIndex! > 0 {
let pageView = PageView()
pageView.verses = verseList[currentIndex! - 1]
bookLabel.text = chapterIndexLabel[currentIndex! - 1]
setupLeftNavItems()
print("Swiped left")
createObserver()
return pageView
}
return nil
}
}
SearchViewController - 发布
class SearchViewController: UITableViewController, UISearchBarDelegate {
let cellId = "cellId"
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.titleView = navSearchBar
setupView()
}
func setupView() {
tableView.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
tableView.delegate = self
tableView.dataSource = self
navSearchBar.delegate = self
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return Books.count
}
**I post the data from this function**
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let cell = tableView.cellForRow(at: indexPath)
let cellLabelContent = cell!.textLabel!.text
let cellLabelIndex = Books.firstIndex(of: cellLabelContent!)
print("Book name:", cellLabelContent!, "index:", cellLabelIndex!)
let notificationName = Notification.Name(rawValue: searchedReturnedKey)
NotificationCenter.default.post(name: notificationName, object: cellLabelIndex)
dismiss(animated: true, completion: nil)
}
}
实际结果-> 无更新
预期结果 -> 更新给定对象
最佳答案
为了能够更新 UIPageViewController 的当前 View ,您需要在 updateVerseView 中执行此操作。
setViewControllers 方法是在 UIPageViewController 中更新 View 的正确且有效的方法。
let pageViewControllers = [pageView]
pageView.verses = verseList[structure.searchedIndex]
setViewControllers(pageViewControllers, direction: .forward, animated: true, completion: nil)
要更新 bookLabel.txt,您只需调用 setupLeftNavItems()
函数即可。
关于ios - Swift:使用 NSNotification 更新 Button.setTitle 和当前 UIPageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54473234/
我创建了一个简单的应用程序单击按钮后,我将页码发布到第二个 View 这是示例代码 ChildViewController *initialViewController = [self viewCon
我正在开发一个应用程序,我希望在模糊效果之上有一个 UIPageView。我知道如何使用 Storyboard 来完成它,但是由于我将它作为 subview 添加到另一个 View 之上,所以我看不出
我正在尝试以全景方式在 UIPageView 后面实现移动的背景图片。 (类似于android主屏幕的概念) PageView 具有过渡风格“滚动”。 到目前为止,我发现的只是使用委托(delegat
我正在使用 UIPageViewController 制作一个应用程序。现在我在每个页面中只有一个 UIWebView。现在我在 viewWillAppear 中运行 [_webView loadRe
Xcode/Swift 相对较新,但有一些其他语言的经验。 我正处于应用程序的初级阶段,正在尝试实现以下功能: 在UIPageView环境中,当用户向前滑动时,标签(其值为整数)增加1。当用户向后滑动
我有一个包含 4 个页面的综合浏览量。 pageView 使用的是之前 UIViewController 的导航栏。我想在导航栏中设置我的 UIPageView 按钮以转到新的 UIView。几乎没有
对 iOS 开发还很陌生,很好奇是否有可能,如果可能的话,最好的人愿意去做。 我想让 UIPageViewController 成为屏幕的一部分。即,我想要一个菜单栏,也许还有一些额外的控件,然后
我有一个包含 3 个页面的 PageViewController。当用户在最后一页上从右向左滑动时,我想从 PageViewController 切换到 AnotherViewController 。
所以我的问题如下: 我有一个 UIViewController,在其中我定义了一个 UIPageViewController 并将其 View 添加到层次结构中,并在其之上添加了一个 UITabl
我试图让 pageControl 指示器点工作,但我无法找到如何让当前 viewController 将 pageControl.currentPage 设置为正确的索引. 这就是我设置 UIPage
我正在制作一个网页浏览,里面有一堆可滚动的页面。我有 pageview 工作,它旋转的 viewcontrollers 每个内部都有一个 ScrollView 。问题是,我认为,滚动不会发生,因为触摸
我有一个图书应用程序,大约有 30 页,每个页面都是一个 UIViewController 中的 UIView。我想将其转换为使用 StoryBoarding 和 UIPageViews 的应用程序。
这发生在所有平台上,但此描述适用于通过 Xcode 的 iPhone 5s 8.4 模拟器。 我一直在使用 C++ 和 cocos2d-x 3.6 版以及 Cocostudio 2.3.1 开发游戏。
Swift 4:我正在使用 NSNotification post 并观察两个 View Controller 之间的对象。我的问题是更新观察给定接收到的对象的 viewController。 有两件
我是一名优秀的程序员,十分优秀!