diff --git a/iOS/Base.lproj/Main.storyboard b/iOS/Base.lproj/Main.storyboard index dc69376e0..e4176dcf2 100644 --- a/iOS/Base.lproj/Main.storyboard +++ b/iOS/Base.lproj/Main.storyboard @@ -1,10 +1,12 @@ - + - + + + @@ -21,13 +23,13 @@ - + + - @@ -115,7 +117,7 @@ - + @@ -142,30 +144,11 @@ - - - - - - - - - - - - - - - - - - + - - @@ -180,7 +163,7 @@ - + @@ -266,7 +249,7 @@ - - + @@ -312,7 +296,6 @@ - @@ -343,13 +326,13 @@ - + @@ -370,13 +353,14 @@ - + - + + @@ -398,7 +382,6 @@ - @@ -423,7 +406,7 @@ - + @@ -440,5 +423,11 @@ + + + + + + diff --git a/iOS/MasterTimeline/MasterTimelineViewController.swift b/iOS/MasterTimeline/MasterTimelineViewController.swift index b2d3eb40d..48b092179 100644 --- a/iOS/MasterTimeline/MasterTimelineViewController.swift +++ b/iOS/MasterTimeline/MasterTimelineViewController.swift @@ -19,10 +19,11 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner private var refreshProgressView: RefreshProgressView? - @IBOutlet weak var filterButton: UIBarButtonItem! @IBOutlet weak var markAllAsReadButton: UIBarButtonItem! - @IBOutlet weak var firstUnreadButton: UIBarButtonItem! - + + private var filterButton: UIBarButtonItem! + private var firstUnreadButton: UIBarButtonItem! + private lazy var dataSource = makeDataSource() private let searchController = UISearchController(searchResultsController: nil) @@ -53,6 +54,10 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner NotificationCenter.default.addObserver(self, selector: #selector(displayNameDidChange), name: .DisplayNameDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(willEnterForeground(_:)), name: UIApplication.willEnterForegroundNotification, object: nil) + // Initialize Programmatic Buttons + filterButton = UIBarButtonItem(image: AppAssets.filterInactiveImage, style: .plain, target: self, action: #selector(toggleFilter(_:))) + firstUnreadButton = UIBarButtonItem(image: AppAssets.nextUnreadArticleImage, style: .plain, target: self, action: #selector(firstUnread(_:))) + // Setup the Search Controller searchController.delegate = self searchController.searchResultsUpdater = self @@ -597,9 +602,9 @@ private extension MasterTimelineViewController { switch coordinator.timelineDefaultReadFilterType { case .none, .read: - filterButton.isHidden = false + navigationItem.rightBarButtonItem = filterButton case .alwaysRead: - filterButton.isHidden = true + navigationItem.rightBarButtonItem = nil } if coordinator.isReadArticlesFiltered { @@ -624,9 +629,16 @@ private extension MasterTimelineViewController { markAllAsReadButton.isEnabled = coordinator.isTimelineUnreadAvailable firstUnreadButton.isEnabled = coordinator.isTimelineUnreadAvailable if coordinator.isRootSplitCollapsed { - firstUnreadButton.isHidden = false + if let toolbarItems = toolbarItems, toolbarItems.last != firstUnreadButton { + var items = toolbarItems + items.append(firstUnreadButton) + setToolbarItems(items, animated: false) + } } else { - firstUnreadButton.isHidden = true + if let toolbarItems = toolbarItems, toolbarItems.last == firstUnreadButton { + let items = Array(toolbarItems[0..