mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
iOS 13 style segmented control
iPad UI improvements
This commit is contained in:
@@ -12,6 +12,7 @@ import MergeLists
|
||||
import AccountContext
|
||||
import GalleryUI
|
||||
import ChatListSearchItemHeader
|
||||
import SegmentedControlNode
|
||||
|
||||
private struct WebSearchContextResultStableId: Hashable {
|
||||
let result: ChatContextResult
|
||||
@@ -135,7 +136,7 @@ class WebSearchControllerNode: ASDisplayNode {
|
||||
|
||||
private let segmentedBackgroundNode: ASDisplayNode
|
||||
private let segmentedSeparatorNode: ASDisplayNode
|
||||
private let segmentedControl: UISegmentedControl
|
||||
private let segmentedControlNode: SegmentedControlNode
|
||||
|
||||
private let toolbarBackgroundNode: ASDisplayNode
|
||||
private let toolbarSeparatorNode: ASDisplayNode
|
||||
@@ -189,8 +190,11 @@ class WebSearchControllerNode: ASDisplayNode {
|
||||
self.segmentedBackgroundNode = ASDisplayNode()
|
||||
self.segmentedSeparatorNode = ASDisplayNode()
|
||||
|
||||
self.segmentedControl = UISegmentedControl(items: [strings.WebSearch_Images, strings.WebSearch_GIFs])
|
||||
self.segmentedControl.selectedSegmentIndex = 0
|
||||
let items = [
|
||||
strings.WebSearch_Images,
|
||||
strings.WebSearch_GIFs
|
||||
]
|
||||
self.segmentedControlNode = SegmentedControlNode(theme: SegmentedControlTheme(theme: theme), items: items.map { SegmentedControlItem(title: $0) }, selectedIndex: 0)
|
||||
|
||||
self.toolbarBackgroundNode = ASDisplayNode()
|
||||
self.toolbarSeparatorNode = ASDisplayNode()
|
||||
@@ -221,7 +225,7 @@ class WebSearchControllerNode: ASDisplayNode {
|
||||
self.addSubnode(self.segmentedBackgroundNode)
|
||||
self.addSubnode(self.segmentedSeparatorNode)
|
||||
if case .media = mode {
|
||||
self.view.addSubview(self.segmentedControl)
|
||||
self.addSubnode(self.segmentedControlNode)
|
||||
}
|
||||
self.addSubnode(self.toolbarBackgroundNode)
|
||||
self.addSubnode(self.toolbarSeparatorNode)
|
||||
@@ -230,7 +234,16 @@ class WebSearchControllerNode: ASDisplayNode {
|
||||
self.addSubnode(self.attributionNode)
|
||||
self.addSubnode(self.badgeNode)
|
||||
|
||||
self.segmentedControl.addTarget(self, action: #selector(self.indexChanged), for: .valueChanged)
|
||||
self.segmentedControlNode.selectedIndexChanged = { [weak self] index in
|
||||
if let strongSelf = self, let scope = WebSearchScope(rawValue: Int32(index)) {
|
||||
let _ = updateWebSearchSettingsInteractively(accountManager: strongSelf.context.sharedContext.accountManager) { _ -> WebSearchSettings in
|
||||
return WebSearchSettings(scope: scope)
|
||||
}.start()
|
||||
strongSelf.requestUpdateInterfaceState(true) { current in
|
||||
return current.withUpdatedScope(scope)
|
||||
}
|
||||
}
|
||||
}
|
||||
self.cancelButton.addTarget(self, action: #selector(self.cancelPressed), forControlEvents: .touchUpInside)
|
||||
self.sendButton.addTarget(self, action: #selector(self.sendPressed), forControlEvents: .touchUpInside)
|
||||
|
||||
@@ -334,7 +347,7 @@ class WebSearchControllerNode: ASDisplayNode {
|
||||
|
||||
self.segmentedBackgroundNode.backgroundColor = self.theme.rootController.navigationBar.backgroundColor
|
||||
self.segmentedSeparatorNode.backgroundColor = self.theme.rootController.navigationBar.separatorColor
|
||||
self.segmentedControl.tintColor = self.theme.rootController.navigationBar.accentTextColor
|
||||
self.segmentedControlNode.updateTheme(SegmentedControlTheme(theme: self.theme))
|
||||
self.toolbarBackgroundNode.backgroundColor = self.theme.rootController.navigationBar.backgroundColor
|
||||
self.toolbarSeparatorNode.backgroundColor = self.theme.rootController.navigationBar.separatorColor
|
||||
|
||||
@@ -358,16 +371,14 @@ class WebSearchControllerNode: ASDisplayNode {
|
||||
var insets = layout.insets(options: [.input])
|
||||
insets.top += navigationBarHeight
|
||||
|
||||
let segmentedHeight: CGFloat = self.segmentedControl.superview != nil ? 44.0 : 5.0
|
||||
let segmentedHeight: CGFloat = self.segmentedControlNode.supernode != nil ? 44.0 : 5.0
|
||||
let panelY: CGFloat = insets.top - UIScreenPixel - 4.0
|
||||
|
||||
transition.updateFrame(node: self.segmentedBackgroundNode, frame: CGRect(origin: CGPoint(x: 0.0, y: panelY), size: CGSize(width: layout.size.width, height: segmentedHeight)))
|
||||
transition.updateFrame(node: self.segmentedSeparatorNode, frame: CGRect(origin: CGPoint(x: 0.0, y: panelY + segmentedHeight), size: CGSize(width: layout.size.width, height: UIScreenPixel)))
|
||||
|
||||
var controlSize = self.segmentedControl.sizeThatFits(layout.size)
|
||||
controlSize.width = layout.size.width - layout.safeInsets.left - layout.safeInsets.right - 10.0 * 2.0
|
||||
|
||||
transition.updateFrame(view: self.segmentedControl, frame: CGRect(origin: CGPoint(x: layout.safeInsets.left + floor((layout.size.width - layout.safeInsets.left - layout.safeInsets.right - controlSize.width) / 2.0), y: panelY + 5.0), size: controlSize))
|
||||
let controlSize = self.segmentedControlNode.updateLayout(.stretchToFill(width: layout.size.width - layout.safeInsets.left - layout.safeInsets.right - 10.0 * 2.0), transition: transition)
|
||||
transition.updateFrame(node: self.segmentedControlNode, frame: CGRect(origin: CGPoint(x: layout.safeInsets.left + floor((layout.size.width - layout.safeInsets.left - layout.safeInsets.right - controlSize.width) / 2.0), y: panelY + 5.0), size: controlSize))
|
||||
|
||||
insets.top -= 4.0
|
||||
|
||||
@@ -471,7 +482,7 @@ class WebSearchControllerNode: ASDisplayNode {
|
||||
self.webSearchInterfaceStatePromise.set(self.webSearchInterfaceState)
|
||||
|
||||
if let state = interfaceState.state {
|
||||
self.segmentedControl.selectedSegmentIndex = Int(state.scope.rawValue)
|
||||
self.segmentedControlNode.selectedIndex = Int(state.scope.rawValue)
|
||||
}
|
||||
|
||||
if let validLayout = self.containerLayout {
|
||||
@@ -656,17 +667,6 @@ class WebSearchControllerNode: ASDisplayNode {
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func indexChanged() {
|
||||
if let scope = WebSearchScope(rawValue: Int32(self.segmentedControl.selectedSegmentIndex)) {
|
||||
let _ = updateWebSearchSettingsInteractively(accountManager: self.context.sharedContext.accountManager) { _ -> WebSearchSettings in
|
||||
return WebSearchSettings(scope: scope)
|
||||
}.start()
|
||||
self.requestUpdateInterfaceState(true) { current in
|
||||
return current.withUpdatedScope(scope)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func cancelPressed() {
|
||||
self.cancel?()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user