탭브 컨트롤러의 하위 탭으로 분할 컨트롤을 사용하고 있습니다. 두 번째 탭 (하위 탭이있는 탭)으로 전환하고 UISegmentedControl을 프로그래밍 방식으로 첫 번째 탭 (0 개 인덱스)으로 전환해야하는 기본 탭에 버튼이 있습니다.UISegmentControl을 프로그래밍 방식으로 업데이트하지 않으면 선택되지 않은 세그먼트의 글꼴 색이 업데이트되지 않습니다.
물론 세그먼트 화 된 컨트롤을 두드리는 것이 좋습니다. 그러나, 프로그래밍 방식으로 selectedSegmentIndex
을 사용하여 탭을 변경하려고하면 선택 해제 된 탭이 글꼴 색을 업데이트하지 않으므로 레이블이 사라지는 것처럼 보입니다.
내가 탭을 변경하는 방법에 대해 읽은 모든 게시물
프로그래밍 내가 올바른 방법으로하고 있어요 것을 나타냅니다. 아무도 내가 뭘 잘못하고 있다고 말할 수 있습니까? 도와 줘서 고마워! 여기 코드입니다 :class AdvertisingViewController: BaseViewController, TabbedController, ClientSelectorController {
var clientSelectorView: ClientSelector?
var tabControl: UISegmentedControl!
var tabView: UIView!
var nextTabIndex: Int? = nil
var activeTab: AdvertisingTabContent? = nil
var tabs: [AdvertisingTabContent]!
let margin: CGFloat = 20
override func viewDidLoad() {
super.viewDidLoad()
// Initialize the tab view.
tabView = UIView()
view.addSubview(tabView!)
// Initialize the tab controls.
tabControl = UISegmentedControl()
tabControl.insertSegment(withTitle: "Calendar", at: 0, animated: false)
tabControl.insertSegment(withTitle: "TV", at: 1, animated: false)
tabControl.insertSegment(withTitle: "Radio", at: 2, animated: false)
tabControl.insertSegment(withTitle: "Search", at: 3, animated: false)
tabControl.insertSegment(withTitle: "Display", at: 4, animated: false)
tabControl.selectedSegmentIndex = 0
tabControl.addTarget(self, action: #selector(selectedTab(sender:)), for: .valueChanged)
view.addSubview(tabControl!)
// Tab control styles.
let font = UIFont.systemFont(ofSize: 12)
tabControl.setTitleTextAttributes([
NSAttributedStringKey.font: font,
NSAttributedStringKey.foregroundColor: Color.lightGrey
], for: .normal)
tabControl.removeBorders()
// Intialize the tabs.
nextTabIndex = nil
tabs = [
CampaignsTab(view: tabView),
TVTab(view: tabView),
RadioTab(view: tabView),
PaidSearchTab(view: tabView),
DisplayTab(view: tabView),
]
// Bind clientSelector button to clientSelectButtonPressed method.
initializeClientSelector()
// Set the background color.
tabView.backgroundColor = Color.backgroundColor
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Update client selector title.
layoutClientSelector()
// Update tab view & segmented control
let controlHeight: CGFloat = 35
tabControl.frame = CGRect(x: margin, y: clientSelectorView!.frame.height, width: view.frame.width - (margin * 2), height: controlHeight)
// Update the tab view.
tabView.frame = CGRect(x: 0, y: clientSelectorView!.frame.height + controlHeight + margin, width: view.frame.width, height: view.frame.height - clientSelectorView!.frame.height - controlHeight - margin)
// Build tab.
buildTab()
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
// Update the tabControl.
if let next = nextTabIndex {
if next != tabControl.selectedSegmentIndex {
tabControl.selectedSegmentIndex = next
}
nextTabIndex = nil
}
}
func clientSelectorClicked(selectorModal: UIViewController) {
present(selectorModal, animated: true, completion: nil)
}
// MARK: - Tabs Control
/**
The user selected a different tab.
*/
@objc func selectedTab(sender: UIButton) {
buildTab()
}
/**
A tab was selected from another part of the app.
(This is called before viewWillAppear from another tab)
*/
func switchToTab(atIndex index: Int) {
nextTabIndex = index
}
func buildTab() {
// Clean up the old tab.
activeTab?.cleanUp()
activeTab = nil
// Check next index.
var index = tabControl.selectedSegmentIndex
if let next = nextTabIndex {
index = next
}
// Add/Build the new tab.
if index >= 0 && tabs.count > index {
activeTab = tabs[index]
activeTab?.buildViews()
}
}
}
업데이트 : 오늘 아침에 솔루션을 찾고
사용 후 몇 시간 이상. 세그먼트 화 된 컨트롤의 하위 뷰에서 레이블을 찾아 수동으로 글꼴 색을 변경하여 해킹을 시도했습니다. 레이블의 텍스트를 변경할 수는 있지만 글꼴 색상은 변경할 수 없습니다. 뭔가가 그것을 무시하고 있습니다.
프로그래밍 방식으로 선택한 인덱스를 변경하는 다른 방법이 있습니까? 사과 티켓을 제출해야합니까? 아무도이 문제가 발생하지 않았습니까? 제공 할 수있는 도움에 미리 감사드립니다.