Merge branch 'feature/Clickable' into 'develop'
updated notification See merge request BPHV_MIPS/vds_ios_sample!28
This commit is contained in:
commit
7046a58b63
@ -33,6 +33,7 @@
|
|||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
44604AD929CE1CF900E62B51 /* LineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44604AD829CE1CF900E62B51 /* LineViewController.swift */; };
|
44604AD929CE1CF900E62B51 /* LineViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44604AD829CE1CF900E62B51 /* LineViewController.swift */; };
|
||||||
|
445BA07A29C088470036A7C5 /* NotificationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 445BA07929C088470036A7C5 /* NotificationViewController.swift */; };
|
||||||
5FC35BE928D5235A004EBEAC /* ButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */; };
|
5FC35BE928D5235A004EBEAC /* ButtonViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */; };
|
||||||
EA0FC2C12912DC5500DF80B4 /* TextLinkCaretViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0FC2C02912DC5500DF80B4 /* TextLinkCaretViewController.swift */; };
|
EA0FC2C12912DC5500DF80B4 /* TextLinkCaretViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA0FC2C02912DC5500DF80B4 /* TextLinkCaretViewController.swift */; };
|
||||||
EA3C3B9D289966EF000CA526 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B9C289966EF000CA526 /* AppDelegate.swift */; };
|
EA3C3B9D289966EF000CA526 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA3C3B9C289966EF000CA526 /* AppDelegate.swift */; };
|
||||||
@ -115,6 +116,7 @@
|
|||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
44604AD829CE1CF900E62B51 /* LineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineViewController.swift; sourceTree = "<group>"; };
|
44604AD829CE1CF900E62B51 /* LineViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LineViewController.swift; sourceTree = "<group>"; };
|
||||||
|
445BA07929C088470036A7C5 /* NotificationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationViewController.swift; sourceTree = "<group>"; };
|
||||||
5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonViewController.swift; sourceTree = "<group>"; };
|
5FC35BE828D5235A004EBEAC /* ButtonViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ButtonViewController.swift; sourceTree = "<group>"; };
|
||||||
EA0FC2C02912DC5500DF80B4 /* TextLinkCaretViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkCaretViewController.swift; sourceTree = "<group>"; };
|
EA0FC2C02912DC5500DF80B4 /* TextLinkCaretViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextLinkCaretViewController.swift; sourceTree = "<group>"; };
|
||||||
EA3C3B99289966EF000CA526 /* VDSSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VDSSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
EA3C3B99289966EF000CA526 /* VDSSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = VDSSample.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
@ -291,6 +293,7 @@
|
|||||||
EAC9257F29119FC400091998 /* TextLinkViewController.swift */,
|
EAC9257F29119FC400091998 /* TextLinkViewController.swift */,
|
||||||
EAB1D2D328AC409F00DAE764 /* LabelViewController.swift */,
|
EAB1D2D328AC409F00DAE764 /* LabelViewController.swift */,
|
||||||
44604AD829CE1CF900E62B51 /* LineViewController.swift */,
|
44604AD829CE1CF900E62B51 /* LineViewController.swift */,
|
||||||
|
445BA07929C088470036A7C5 /* NotificationViewController.swift */,
|
||||||
EA89201828B56DF5006B9984 /* RadioBoxGroupViewController.swift */,
|
EA89201828B56DF5006B9984 /* RadioBoxGroupViewController.swift */,
|
||||||
EAF7F11928A14A0E00B287F5 /* RadioButtonViewController.swift */,
|
EAF7F11928A14A0E00B287F5 /* RadioButtonViewController.swift */,
|
||||||
EA84F76128BE4AE500D67ABC /* RadioSwatchGroupViewController.swift */,
|
EA84F76128BE4AE500D67ABC /* RadioSwatchGroupViewController.swift */,
|
||||||
@ -456,6 +459,7 @@
|
|||||||
EA3C3BB628996775000CA526 /* MenuViewController.swift in Sources */,
|
EA3C3BB628996775000CA526 /* MenuViewController.swift in Sources */,
|
||||||
EA3C3B9D289966EF000CA526 /* AppDelegate.swift in Sources */,
|
EA3C3B9D289966EF000CA526 /* AppDelegate.swift in Sources */,
|
||||||
EA5E3050294D11540082B959 /* TileContainerViewController.swift in Sources */,
|
EA5E3050294D11540082B959 /* TileContainerViewController.swift in Sources */,
|
||||||
|
445BA07A29C088470036A7C5 /* NotificationViewController.swift in Sources */,
|
||||||
EAF7F11A28A14A0E00B287F5 /* RadioButtonViewController.swift in Sources */,
|
EAF7F11A28A14A0E00B287F5 /* RadioButtonViewController.swift in Sources */,
|
||||||
EA89204628B66CE2006B9984 /* ScrollViewController.swift in Sources */,
|
EA89204628B66CE2006B9984 /* ScrollViewController.swift in Sources */,
|
||||||
EA3C3B9F289966EF000CA526 /* SceneDelegate.swift in Sources */,
|
EA3C3B9F289966EF000CA526 /* SceneDelegate.swift in Sources */,
|
||||||
|
|||||||
@ -26,19 +26,18 @@ extension UIView {
|
|||||||
|
|
||||||
extension ButtonBase {
|
extension ButtonBase {
|
||||||
func labelPublisher(_ label: UILabel){
|
func labelPublisher(_ label: UILabel){
|
||||||
publisher(for: .touchUpInside)
|
onClick = { control in
|
||||||
.sink { control in
|
let newText = "\(control.text!) clicked - "
|
||||||
let newText = "\(control.text!) clicked - "
|
if let labelText = label.text {
|
||||||
if let labelText = label.text {
|
let components = labelText.components(separatedBy: " - ")
|
||||||
let components = labelText.components(separatedBy: " - ")
|
let last: String = (components.last ?? "0").trimmingCharacters(in: .whitespaces)
|
||||||
let last: String = (components.last ?? "0").trimmingCharacters(in: .whitespaces)
|
let count = Int(last)!
|
||||||
let count = Int(last)!
|
label.text = "\(newText)\(count+1)"
|
||||||
label.text = "\(newText)\(count+1)"
|
} else {
|
||||||
} else {
|
label.text = "\(newText)1"
|
||||||
label.text = "\(newText)1"
|
}
|
||||||
}
|
print("clicked me")
|
||||||
print("clicked me")
|
}
|
||||||
}.store(in: &subscribers)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -74,16 +74,14 @@ public class PickerSelectorView<EnumType: RawRepresentable>: UIStackView, Picker
|
|||||||
updateSelectedIndex()
|
updateSelectedIndex()
|
||||||
addArrangedSubview(label)
|
addArrangedSubview(label)
|
||||||
addArrangedSubview(button)
|
addArrangedSubview(button)
|
||||||
button
|
button.onClick = { [weak self] _ in
|
||||||
.publisher(for: .touchUpInside)
|
self?.picker?.delegate = self
|
||||||
.sink { [weak self] _ in
|
self?.picker?.dataSource = self
|
||||||
self?.picker?.delegate = self
|
self?.picker?.reloadAllComponents()
|
||||||
self?.picker?.dataSource = self
|
self?.picker?.selectRow(self?.selectedIndex ?? 0, inComponent: 0, animated: false)
|
||||||
self?.picker?.reloadAllComponents()
|
self?.picker?.isHidden = false
|
||||||
self?.picker?.selectRow(self?.selectedIndex ?? 0, inComponent: 0, animated: false)
|
self?.scrollToBottom?()
|
||||||
self?.picker?.isHidden = false
|
}
|
||||||
self?.scrollToBottom?()
|
|
||||||
}.store(in: &subscribers)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateSelectedIndex() {
|
func updateSelectedIndex() {
|
||||||
|
|||||||
@ -48,7 +48,7 @@ class ButtonViewController: BaseViewController {
|
|||||||
addFormRow(label: "Surface", view: surfacePickerSelectorView)
|
addFormRow(label: "Surface", view: surfacePickerSelectorView)
|
||||||
addFormRow(label: "Use", view: usePickerSelectorView)
|
addFormRow(label: "Use", view: usePickerSelectorView)
|
||||||
addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch))
|
addFormRow(label: "Disabled", view: .makeWrapper(for: disabledSwitch))
|
||||||
addFormRow(label: "Label", view: textField)
|
addFormRow(label: "Text", view: textField)
|
||||||
addFormRow(label: "Width", view: widthTextField)
|
addFormRow(label: "Width", view: widthTextField)
|
||||||
addFormRow(label: "Size", view: buttonSizePickerSelectorView)
|
addFormRow(label: "Size", view: buttonSizePickerSelectorView)
|
||||||
|
|
||||||
|
|||||||
@ -19,7 +19,7 @@ class CheckboxViewController: BaseViewController {
|
|||||||
var errorTextField = TextField()
|
var errorTextField = TextField()
|
||||||
var showErrorSwitch = Toggle()
|
var showErrorSwitch = Toggle()
|
||||||
|
|
||||||
var checkbox = SoloCheckbox()
|
var checkbox = Checkbox()
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|||||||
@ -80,6 +80,7 @@ class MenuViewController: UITableViewController {
|
|||||||
MenuComponent(title: "InputField", completed: false, viewController: InputFieldViewController.self),
|
MenuComponent(title: "InputField", completed: false, viewController: InputFieldViewController.self),
|
||||||
MenuComponent(title: "Label", completed: true, viewController: LabelViewController.self),
|
MenuComponent(title: "Label", completed: true, viewController: LabelViewController.self),
|
||||||
MenuComponent(title: "Line", completed: false, viewController: LineViewController.self),
|
MenuComponent(title: "Line", completed: false, viewController: LineViewController.self),
|
||||||
|
MenuComponent(title: "Notification", completed: false, viewController: NotificationViewController.self),
|
||||||
MenuComponent(title: "RadioBoxGroup", completed: true, viewController: RadioBoxGroupViewController.self),
|
MenuComponent(title: "RadioBoxGroup", completed: true, viewController: RadioBoxGroupViewController.self),
|
||||||
MenuComponent(title: "RadioButtonGroup", completed: true, viewController: RadioButtonViewController.self),
|
MenuComponent(title: "RadioButtonGroup", completed: true, viewController: RadioButtonViewController.self),
|
||||||
MenuComponent(title: "RadioSwatchGroup", completed: true, viewController: RadioSwatchGroupViewController.self),
|
MenuComponent(title: "RadioSwatchGroup", completed: true, viewController: RadioSwatchGroupViewController.self),
|
||||||
|
|||||||
126
VDSSample/ViewControllers/NotificationViewController.swift
Normal file
126
VDSSample/ViewControllers/NotificationViewController.swift
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
//
|
||||||
|
// NotificationViewController.swift
|
||||||
|
// VDSSample
|
||||||
|
//
|
||||||
|
// Created by Nadigadda, Sumanth on 14/03/23.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
import VDS
|
||||||
|
|
||||||
|
class NotificationViewController: BaseViewController {
|
||||||
|
|
||||||
|
var notificationView = Notification()
|
||||||
|
let label = Label()
|
||||||
|
let titleTextField = TextField()
|
||||||
|
let subTitleTextField = TextField()
|
||||||
|
let buttonGroupToggle = Toggle()
|
||||||
|
let firstButtonTextField = TextField()
|
||||||
|
let secondButtonTextField = TextField()
|
||||||
|
|
||||||
|
let titleDefaultText = "This is title"
|
||||||
|
let subtitleDefaultText = "This is subtitle"
|
||||||
|
let firstButtonDefaultText = "Button 1"
|
||||||
|
let secondButtonDefaultText = "Button 2"
|
||||||
|
|
||||||
|
lazy var notificationTypePickerSelectorView = {
|
||||||
|
PickerSelectorView(title: "Info",
|
||||||
|
picker: self.picker,
|
||||||
|
items: Notification.NotificationStyle.allCases)
|
||||||
|
}()
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
notificationView.titleText = titleDefaultText
|
||||||
|
notificationView.subTitleText = subtitleDefaultText
|
||||||
|
titleTextField.text = titleDefaultText
|
||||||
|
subTitleTextField.text = subtitleDefaultText
|
||||||
|
|
||||||
|
setupButtons(with: firstButtonDefaultText, secondButtonText: secondButtonDefaultText)
|
||||||
|
firstButtonTextField.text = firstButtonDefaultText
|
||||||
|
secondButtonTextField.text = secondButtonDefaultText
|
||||||
|
|
||||||
|
addContentTopView(view: notificationView)
|
||||||
|
|
||||||
|
setupForm()
|
||||||
|
setupPicker()
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupForm() {
|
||||||
|
addFormRow(label: "Surface", view: surfacePickerSelectorView)
|
||||||
|
addFormRow(label: "Style", view: notificationTypePickerSelectorView)
|
||||||
|
addFormRow(label: "Title", view: titleTextField)
|
||||||
|
addFormRow(label: "SubTitle", view: subTitleTextField)
|
||||||
|
addFormRow(label: "Hide Button Group", view: buttonGroupToggle)
|
||||||
|
addFormRow(label: "Button Action", view: label)
|
||||||
|
addFormRow(label: "First Button Text", view: firstButtonTextField)
|
||||||
|
addFormRow(label: "Second Button Text", view: secondButtonTextField)
|
||||||
|
|
||||||
|
notificationView.onCloseClick = { notification in
|
||||||
|
print("onCloseClick: \(notification.titleText)")
|
||||||
|
}
|
||||||
|
|
||||||
|
titleTextField.textPublisher.sink { newString in
|
||||||
|
self.notificationView.titleText = newString
|
||||||
|
}.store(in: &subscribers)
|
||||||
|
|
||||||
|
subTitleTextField.textPublisher.sink { newString in
|
||||||
|
self.notificationView.subTitleText = newString
|
||||||
|
}.store(in: &subscribers)
|
||||||
|
|
||||||
|
buttonGroupToggle.publisher(for: .valueChanged).sink { [weak self] toggle in
|
||||||
|
if toggle.isOn {
|
||||||
|
self?.notificationView.primaryButtonModel = nil
|
||||||
|
self?.notificationView.secondaryButtonModel = nil
|
||||||
|
self?.label.text = ""
|
||||||
|
} else {
|
||||||
|
self?.setupButtons(with: self?.firstButtonDefaultText, secondButtonText: self?.secondButtonDefaultText)
|
||||||
|
}
|
||||||
|
}.store(in: &subscribers)
|
||||||
|
|
||||||
|
|
||||||
|
firstButtonTextField.textPublisher.sink { newString in
|
||||||
|
|
||||||
|
if newString.isEmpty {
|
||||||
|
self.notificationView.primaryButtonModel = nil
|
||||||
|
self.notificationView.secondaryButtonModel = nil
|
||||||
|
} else {
|
||||||
|
self.setupButtons(with: newString, secondButtonText: self.secondButtonTextField.text)
|
||||||
|
}
|
||||||
|
|
||||||
|
}.store(in: &subscribers)
|
||||||
|
|
||||||
|
secondButtonTextField.textPublisher.sink { newString in
|
||||||
|
if !(self.firstButtonTextField.text?.isEmpty ?? true){
|
||||||
|
self.setupButtons(secondButtonText: newString)
|
||||||
|
}
|
||||||
|
}.store(in: &subscribers)
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupPicker() {
|
||||||
|
surfacePickerSelectorView.onPickerDidSelect = { [weak self] item in
|
||||||
|
self?.notificationView.surface = item
|
||||||
|
self?.contentTopView.backgroundColor = item.color
|
||||||
|
}
|
||||||
|
|
||||||
|
notificationTypePickerSelectorView.onPickerDidSelect = { [weak self] item in
|
||||||
|
self?.notificationView.type = item
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func setupButtons(with firstButtonText: String? = nil, secondButtonText: String? = nil) {
|
||||||
|
if let firstButtonText {
|
||||||
|
notificationView.primaryButtonModel = .init(text: firstButtonText, onClick: { [weak self] button in
|
||||||
|
self?.label.text = "\(button.text!) button click"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if let secondButtonText {
|
||||||
|
notificationView.secondaryButtonModel = .init(text: secondButtonText, onClick: { [weak self] button in
|
||||||
|
self?.label.text = "\(button.text!) button click"
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -36,7 +36,6 @@ class TileContainerViewController: BaseViewController {
|
|||||||
}()
|
}()
|
||||||
|
|
||||||
var clickableSwitch = Toggle()
|
var clickableSwitch = Toggle()
|
||||||
var clickableCancel: AnyCancellable?
|
|
||||||
|
|
||||||
var showBackgroundImageSwitch = Toggle()
|
var showBackgroundImageSwitch = Toggle()
|
||||||
var showBorderSwitch = Toggle()
|
var showBorderSwitch = Toggle()
|
||||||
@ -78,15 +77,13 @@ class TileContainerViewController: BaseViewController {
|
|||||||
clickableSwitch
|
clickableSwitch
|
||||||
.publisher(for: .valueChanged)
|
.publisher(for: .valueChanged)
|
||||||
.sink { [weak self] sender in
|
.sink { [weak self] sender in
|
||||||
|
guard let self else { return }
|
||||||
if sender.isOn {
|
if sender.isOn {
|
||||||
self?.clickableCancel = self?.tileContainer
|
self.tileContainer.onClick = { _ in
|
||||||
.publisher(for: .touchUpInside)
|
print("you click on me!")
|
||||||
.sink(receiveValue: { _ in
|
}
|
||||||
print("you click on me!")
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
self?.clickableCancel?.cancel()
|
self.tileContainer.onClick = nil
|
||||||
self?.clickableCancel = nil
|
|
||||||
}
|
}
|
||||||
}.store(in: &subscribers)
|
}.store(in: &subscribers)
|
||||||
|
|
||||||
|
|||||||
@ -79,13 +79,13 @@ class TileletViewController: BaseViewController {
|
|||||||
.sink { [weak self] sender in
|
.sink { [weak self] sender in
|
||||||
guard let tilelet = self?.tilelet else { return }
|
guard let tilelet = self?.tilelet else { return }
|
||||||
if sender.isOn {
|
if sender.isOn {
|
||||||
tilelet.onClickSubscriber = tilelet.publisher(for: .touchUpInside)
|
tilelet.onClick = { t in
|
||||||
.sink(receiveValue: { _ in
|
print("you click on me!")
|
||||||
print("you click on me!")
|
}
|
||||||
})
|
} else {
|
||||||
|
tilelet.onClick = nil
|
||||||
}
|
}
|
||||||
}.store(in: &subscribers)
|
}.store(in: &subscribers)
|
||||||
|
|
||||||
widthTextField
|
widthTextField
|
||||||
.textPublisher
|
.textPublisher
|
||||||
.sink { [weak self] text in
|
.sink { [weak self] text in
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user