Post

Replies

Boosts

Views

Activity

SwiftUI: Change List row Highlight colour when tapped
The default colour of a list row when tapped is grey. I try many solution on stackoverflow and apple form, I did not solve problem, any idea? RecentRowView: struct RecentRowView: View {         var body: some View {            HStack(spacing: 15){       List{         NavigationLink(destination: SecondView()                           ){                 VStack{         HStack{             VStack(alignment: .leading, spacing: 8, content: {                             Text(recent.name)                 .font(.custom("Helvetica Neue", size: 14))                               })           Spacer(minLength: 10)           ZStack {                 }           }  }          }         }        }     }    }
1
0
4k
Sep ’21
Change icons border when click the bottom tab bar in Swift
I have custom bottom navigation bar in IOS application, everythings work very well, and I want to change bottom navigation items tint color when I click the items, and I was use the self.imgView.image!.withRenderingMode(.alwaysTemplate) self.imgView.tintColor = .red in isSelected, and it is change whole icons border tint color. I do not know where I miss, any idea? RootStackTabViewController: class RootStackTabViewController: UIViewController { @IBOutlet weak var bottomStack: UIStackView! var currentIndex = 0 lazy var tabs: [StackItemView] = { var items = [StackItemView]() for _ in 0..<5 { items.append(StackItemView.newInstance) } return items }() lazy var tabModels: [BottomStackItem] = { return [ BottomStackItem(title: "Home", image: "home"), BottomStackItem(title: "Favorites", image: "heart"), BottomStackItem(title: "Search", image: "search"), BottomStackItem(title: "Profile", image: "user"), BottomStackItem(title: "Settings", image: "settings") ] }() override func viewDidLoad() { super.viewDidLoad() self.setupTabs() } func setupTabs() { for (index, model) in self.tabModels.enumerated() { let tabView = self.tabs[index] model.isSelected = index == 0 tabView.item = model tabView.delegate = self self.bottomStack.addArrangedSubview(tabView) } } } StackItemView: protocol StackItemViewDelegate: AnyObject { func handleTap(_ view: StackItemView) } class StackItemView: UIView { @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var imgView: UIImageView! @IBOutlet weak var highlightView: UIView! private let higlightBGColor = UIColor(hexString: "1160FB") static var newInstance: StackItemView { return Bundle.main.loadNibNamed( StackItemView.className(), owner: nil, options: nil )?.first as! StackItemView } weak var delegate: StackItemViewDelegate? override func awakeFromNib() { super.awakeFromNib() self.addTapGesture() } var isSelected: Bool = false { willSet { self.updateUI(isSelected: newValue) self.titleLabel.textColor = UIColor.white self.imgView.image!.withRenderingMode(.alwaysTemplate) self.imgView.tintColor = .red } } var item: Any? { didSet { self.configure(self.item) } } private func configure(_ item: Any?) { guard let model = item as? BottomStackItem else { return } self.titleLabel.text = model.title self.imgView.image = UIImage(named: model.image) self.isSelected = model.isSelected } private func updateUI(isSelected: Bool) { guard let model = item as? BottomStackItem else { return } model.isSelected = isSelected let options: UIView.AnimationOptions = isSelected ? [.curveEaseIn] : [.curveEaseOut] UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0.5, options: options, animations: { self.titleLabel.text = isSelected ? model.title : "" let color = isSelected ? self.higlightBGColor : .white self.highlightView.backgroundColor = color (self.superview as? UIStackView)?.layoutIfNeeded() }, completion: nil) } } extension StackItemView { func addTapGesture() { let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleGesture(_:))) self.addGestureRecognizer(tapGesture) } @objc func handleGesture(_ sender: UITapGestureRecognizer) { self.delegate?.handleTap(self) } }
1
0
1.2k
Jul ’21
How we can use userInteractionEnabled in (number.name) for number only?
I have number.name array like 1.go, 2.java, 3.swift etc..and I do not want to edit the number again, user will only change name. Is it possible?   if words.count == 24 {         for (index, textField) in textFields.enumerated() {           textField.delegate = self           textField.firstDesign()           textField.text = "\(index + 1). \(words[index])"           mneArr.append(words[index])         }
3
0
514
Jul ’21
How can I use the searchable feature for my row data in SwiftUI?
I have data in row like  Text(data.user) and I want to use searchable for it, I can use search bar, bat I want to use filter for user.    Text(data.user)                   .searchable(text: $searchText, placement: .navigationBarDrawer) like here, tere is some example for filter, but how can I use it for my data. Any idea? .onChange(of: searchText) { searchText in       if !searchText.isEmpty {         articles = sampleArticles.filter { $0.title.contains(searchText) }     } else {         articles = sampleArticles     } }
3
0
580
Sep ’21
How can use model in view shortly?
I have small restaurans data in content view, but I want to use this data shortly inside of the homeview, I am typing   to use  @State var restaurants: [ Restaurant] but in other view I have HomeView, it is throw an error like     Cannot convert value of type '[Restaurant].Type' to expected argument type '[Restaurant]' for    HomeView( restaurants: [Restaurant]) line of code, I do not know what I missed? Any idea? struct HomeView: View { @State var restaurants = [ Restaurant(name: "Cafe Deadend", image: "cafedeadend"), Restaurant(name: "Homei", image: "homei"), Restaurant(name: "Teakha", image: "teakha"), Restaurant(name: "Cafe Loisl", image: "cafeloisl"), ] }
0
0
341
Feb ’22
Why I am not succes to register in my app in SwiftUI?
I am use firebase for my SwiftUI App, and I want to register with mail, but when I typing my mail it is throw an error like Oops! Something went wrong. Please try again. I do not know why? here is my code: StatusViewModel: class StatusViewModel: Identifiable, ObservableObject {       var title: String   var message: String       init(title: String = "", message: String = "") {     self.title = title     self.message = message   }       static var signUpSuccessStatus: StatusViewModel {     return StatusViewModel(title: "Successful", message: "Your account has been created successfully")   }       static var logInSuccessStatus: StatusViewModel {     return StatusViewModel(title: "Successful", message: "Your account has been logged in successfully")   }       static var errorStatus: StatusViewModel {     return StatusViewModel(title: "Error", message: "Oops! Something went wrong. Please try again.")   } } RegisterViewModel: import Foundation import Combine class RegisterViewModel: ObservableObject {   @Published var email: String = ""   @Published var password: String = ""   @Published var statusViewModel: StatusViewModel?   @Published var state: AppState       private var cancellableBag = Set<AnyCancellable>()   private let authAPI: AuthAPI       init(authAPI: AuthAPI, state: AppState) {     self.authAPI = authAPI     self.state = state   }       func signUp() {     authAPI.signUp(email: email, password: password)       .receive(on: RunLoop.main)       .map(resultMapper)       .replaceError(with: StatusViewModel.errorStatus)       .assign(to: \.statusViewModel, on: self)       .store(in: &cancellableBag)   } } extension RegisterViewModel {   private func resultMapper(with user: User?) -> StatusViewModel {     if user != nil {       state.currentUser = user       return StatusViewModel.signUpSuccessStatus     } else {       return StatusViewModel.errorStatus     }   } } struct Register: View {       @ObservedObject private var viewModel: RegisterViewModel   @State var pushActive = false         init(state: AppState) {           self.viewModel = RegisterViewModel(authAPI: AuthService(), state: state)           }   var body: some View {   NavigationLink(destination: HomeView(state: viewModel.state),                       isActive: self.$pushActive) {                 Button {                              self.viewModel.signUp()                                     } label: {                   Text("Register")                     .padding()                                     }               } } }
0
0
561
Mar ’22
How we can use the multiple register screen in SwiftUI for firebase?
I have multiple register screen in swiftUI, I did not understand how I will connect first register screen to second register screen, normally first register screen connect to main screen, but I want to connect first register screen to second register screen, and connect second register screen to main screen, how can I do it, any idea? StatusViewModel: class StatusViewModel: Identifiable, ObservableObject {       var title: String   var message: String       init(title: String = "", message: String = "") {     self.title = title     self.message = message   }       static var signUpSuccessStatus: StatusViewModel {     return StatusViewModel(title: "Successful", message: "Your account has been created successfully")   }       static var logInSuccessStatus: StatusViewModel {     return StatusViewModel(title: "Successful", message: "Your account has been logged in successfully")   }       static var errorStatus: StatusViewModel {     return StatusViewModel(title: "Error", message: "Oops! Something went wrong. Please try again.")   } } RegisterViewModel: import Foundation import Combine class RegisterViewModel: ObservableObject {   @Published var email: String = ""   @Published var password: String = ""   @Published var statusViewModel: StatusViewModel?   @Published var state: AppState       private var cancellableBag = Set<AnyCancellable>()   private let authAPI: AuthAPI       init(authAPI: AuthAPI, state: AppState) {     self.authAPI = authAPI     self.state = state   }       func signUp() {     authAPI.signUp(email: email, password: password)       .receive(on: RunLoop.main)       .map(resultMapper)       .replaceError(with: StatusViewModel.errorStatus)       .assign(to: \.statusViewModel, on: self)       .store(in: &cancellableBag)   } } extension RegisterViewModel {   private func resultMapper(with user: User?) -> StatusViewModel {     if user != nil {       state.currentUser = user       return StatusViewModel.signUpSuccessStatus     } else {       return StatusViewModel.errorStatus     }   } } first register screen: struct Register: View {       @ObservedObject private var viewModel: RegisterViewModel   @State var pushActive = false         init(state: AppState) {           self.viewModel = RegisterViewModel(authAPI: AuthService(), state: state)           }   var body: some View {  VStack(){                               TextField("Email Address",text:$viewModel.email)                 .autocapitalization(.none)                 .padding()                  HStack(spacing: 15){                     TextField("Password", text: $viewModel.password)                       .autocapitalization(.none)                                 }   NavigationLink(destination: HomeView(state: viewModel.state),                       isActive: self.$pushActive) {                 Button {                              self.viewModel.signUp()                                     } label: {                   Text("Register")                     .padding()                                     }               } } } second register screen: struct SecondRegister: View {   var body: some View {           GeometryReader { geometry in          ZStack{           VStack(alignment: .center, spacing: 3){                          TextField("First Name",text:self.$first_name)                 .autocapitalization(.none)                 .padding()               TextField("Last Name", text: self.$last_name)                 .autocapitalization(.none)                 .padding()                                 }                 Button {                 } label: {                   Text("Next")                     .padding()                    }             }           }.padding()           }.padding(.top,60)                 }     }
0
0
576
Mar ’22
Why I am able to register user info to firebase in SwiftUI App?
I have register screen and I am not able to register info to firebase, I put user info on simulator, but it just hold on on screen, and no any change on firebase, any idea? where I missed? import SwiftUI import Firebase struct Register: View {   @State var name = ""   @State var about = ""       @Binding var show : Bool   var body: some View {    VStack(alignment: .center, spacing: 3){                          TextField("Name",text:self.$name)                 .padding()                                       TextField(" about", text: self.$about)                 .padding()                if self.loading{                                          HStack{                                              Spacer()                                              Indicator()                                              Spacer()                     }                   }                                        else{                                 Button {                                       if self.name != "" && self.about != "" {                                                    self.loading.toggle()                     CreateUser(name: self.name, about: self.about) { (status) in                                                          if status{                                                              self.show.toggle()                                                       }                         }                       }                     else{                                                    self.alert.toggle()                                             }                 } label: {                   Text("Next")                     .padding()                    }               } } import Foundation import Firebase func CreateUser(name: String,about : String, completion : @escaping (Bool)-> Void){       let db = Firestore.firestore()       let storage = Storage.storage().reference()       let uid = Auth.auth().currentUser?.uid                   db.collection("users").document(uid!).setData(["name":name,"about":about, "uid":uid!]) { (err) in                   if err != nil{                       print((err?.localizedDescription)!)           return         }                   completion(true)                   UserDefaults.standard.set(true, forKey: "status")                   UserDefaults.standard.set(name, forKey: "UserName")                   NotificationCenter.default.post(name: NSNotification.Name("statusChange"), object: nil)       }     }
0
0
640
Mar ’22
Why I am not able to use two screen for registration in SwiftUI?
I have register screen in SwiftUI, and I want to use two screen for register users, one view have mail and password, and other view have name surname and occupation, but I am still do not understand how I will connect both register view, any idea? RegistrationViewModel: enum RegistrationState { case successfullyRegistered case failed(error: Error) case na } protocol RegistrationViewModel { func create() var service: RegistrationService { get } var state: RegistrationState { get } var hasError: Bool { get } var newUser: RegistrationCredentials { get } init(service: RegistrationService) } final class RegistrationViewModelImpl: ObservableObject, RegistrationViewModel { let service: RegistrationService @Published var state: RegistrationState = .na @Published var newUser = RegistrationCredentials(email: "", password: "", firstName: "", lastName: "", occupation: "") @Published var hasError: Bool = false private var subscriptions = Set<AnyCancellable>() init(service: RegistrationService) { self.service = service setupErrorSubscription() } func create() { service .register(with: newUser) .sink { [weak self] res in switch res { case .failure(let error): self?.state = .failed(error: error) default: break } } receiveValue: { [weak self] in self?.state = .successfullyRegistered } .store(in: &subscriptions)}} private extension RegistrationViewModelImpl { func setupErrorSubscription() { $state .map { state -> Bool in switch state { case .successfullyRegistered, .na: return false case .failed: return true}} .assign(to: &$hasError)}} firstscreen: struct RegisterView: View { @StateObject private var viewModel = RegistrationViewModelImpl( service: RegistrationServiceImpl() ) var body: some View { NavigationView { VStack(spacing: 32) { VStack(spacing: 16) { InputTextFieldView(text: $viewModel.newUser.email, placeholder: "Email", keyboardType: .emailAddress, systemImage: "envelope") InputPasswordView(password: $viewModel.newUser.password, placeholder: "Password", systemImage: "lock") } ButtonView(title: "Next") { viewModel.create() } } .padding(.horizontal, 15) .alert(isPresented: $viewModel.hasError, content: { if case .failed(let error) = viewModel.state { return Alert( title: Text("Error"), message: Text(error.localizedDescription)) } else { return Alert( title: Text("Error"), message: Text("Something went wrong")) }})}}} secondscreen: import SwiftUI struct SecondRegisterView: View { @StateObject private var viewModel = RegistrationViewModelImpl( service: RegistrationServiceImpl() ) var body: some View { NavigationView { VStack(spacing: 32) { VStack(spacing: 16) { InputTextFieldView(text: $viewModel.newUser.firstName, placeholder: "First Name", keyboardType: .namePhonePad, systemImage: nil) InputTextFieldView(text: $viewModel.newUser.lastName, placeholder: "Last Name", keyboardType: .namePhonePad, systemImage: nil) InputTextFieldView(text: $viewModel.newUser.occupation, placeholder: "Occupation", keyboardType: .namePhonePad, systemImage: nil) } ButtonView(title: "Sign up") { viewModel.create() } } .padding(.horizontal, 15) .navigationTitle("Register") .applyClose() .alert(isPresented: $viewModel.hasError, content: { if case .failed(let error) = viewModel.state { return Alert( title: Text("Error"), message: Text(error.localizedDescription)) } else { return Alert( title: Text("Error"), message: Text("Something went wrong")) } }) } } }
1
0
822
Mar ’22
Why I am not able to use mobile authentication for firebase in SwiftUI project?
I have a problem in my SwiftUI project, I try to use mobile authentication with firebase, when I put my number and click the button , it is throw an error as a If app delegate swizzling is disabled, remote notifications received by UIApplicationDelegate need to be forwarded to FIRAuth's canHandleNotification: method. I am still do not understand what I missed? @State var no = "" @State var show = false @State var msg = "" @State var alert = false @State var ID = "" var body : some View{ VStack{ TextField("No",text:self.$no) NavigationLink(destination: CodeView(show: $show, ID: $ID), isActive: $show) { Button { PhoneAuthProvider.provider().verifyPhoneNumber(self.no, uiDelegate: nil) { (ID, err) in if err != nil{ self.msg = (err?.localizedDescription)! self.alert.toggle() return } self.ID = ID! self.show.toggle() } } label: { Text("OK") .padding() } } } .alert(isPresented: $alert) { Alert(title: Text("Error"), message: Text(self.msg), dismissButton: .default(Text("Ok"))) } } CodeView: @State var scode = "" @State var show = false @State var msg = "" @State var alert = false @State var ID = "" VStack { TextField("SMS Code", text: self.$scode) NavigationLink(destination: HomeView(), isActive: $show) { Button { let credential = PhoneAuthProvider.provider().credential(withVerificationID: self.ID, verificationCode: self.scode) Auth.auth().signIn(with: credential) { (res, err) in if err != nil{ self.msg = (err?.localizedDescription)! self.alert.toggle() return } UserDefaults.standard.set(true, forKey: "status") NotificationCenter.default.post(name: NSNotification.Name("statusChange"), object: nil) } } label: { Text("Next") .padding() } } .alert(isPresented: $alert) { Alert(title: Text("Error"), message: Text(self.msg), dismissButton: .default(Text("Ok"))) } MyApp: import SwiftUI import Firebase @main struct App: App { init() { FirebaseApp.configure() } var body: some Scene { WindowGroup { ZStack{ ContentView() } } } }
1
0
1.7k
Mar ’22
How can I use custom image instead of the ImagePicker in SwiftUI?
I have simple chat app, and it is work for image picker, but I have custom image view and it fetch the images from internet, I want to use them instead of the image picker in my phone, but I did not find any solution, is there any idea about it? struct Home: View { @State var message = "" @State var imagePicker = false @State var imgData: Data = Data(count: 0) @StateObject var allMessages = Messages() var body: some View { ZStack { VStack { VStack { // Displaying Message ScrollView(.vertical, showsIndicators: true) { ScrollViewReader { reader in VStack(spacing: 20) { ForEach(allMessages.messages) { msg in ChatBubble(msg: msg) } .onChange(of: allMessages.messages) { value in if value.last!.myMsg { reader.scrollTo(value.last?.id) }}}}}}} .clipShape(RoundedRectangle(cornerRadius: 35))} VStack { HStack(spacing: 15) { HStack(spacing: 15) { TextField("Message", text: $message) Button(action: { // toggling image picker imagePicker.toggle() }) { Image(systemName: "paperclip.circle.fill") .font(.system(size: 22)) .foregroundColor(.gray)} .background(Color.black.opacity(0.06)) .clipShape(Capsule()) if message != "" { Button(action: { withAnimation(.easeIn) { allMessages.messages.append(Message(id: Date(), message: message, myMsg: true, profilePic: "p1", photo: nil)) } message = "" }) { Image(systemName: "paperplane.fill") .font(.system(size: 22)) .foregroundColor(Color("Color")) // rotating the image .rotationEffect(.init(degrees: 45)) .clipShape(Circle())}}} .padding(.bottom) .padding(.horizontal) .background(Color.white) .animation(.easeOut) } .fullScreenCover(isPresented: $imagePicker, onDismiss: { if imgData.count != 0 { allMessages.writeMessage(id: Date(), msg: "", photo: imgData, myMsg: true, profilePic: "p1") } }) { ImagePicker(imagePicker: $imagePicker, imgData: $imgData) }}}} struct ChatBubble: View { var msg: Message var body: some View { HStack(alignment: .top, spacing: 10) { if msg.myMsg { if msg.photo == nil { Text(msg.message) .padding(.all) .background(Color.black.opacity(0.06)) .clipShape(BubbleArrow(myMsg: msg.myMsg)) } else { Image(uiImage: UIImage(data: msg.photo!)!) .resizable() .frame(width: UIScreen.main.bounds.width - 150, height: 150) .clipShape(BubbleArrow(myMsg: msg.myMsg)) } Image(msg.profilePic) .resizable() .frame(width: 30, height: 30) .clipShape(Circle()) } else { Image(msg.profilePic) .resizable() .frame(width: 30, height: 30) .clipShape(Circle()) if msg.photo == nil { Text(msg.message) .foregroundColor(.white) .padding(.all) .background(Color("Color")) .clipShape(BubbleArrow(myMsg: msg.myMsg)) } else { Image(uiImage: UIImage(data: msg.photo!)!) .resizable() .frame(width: UIScreen.main.bounds.width - 150, height: 150) .clipShape(BubbleArrow(myMsg: msg.myMsg))}}} .id(msg.id)}} struct RoundedShape: Shape { func path(in rect: CGRect) -> Path { let path = UIBezierPath(roundedRect: rect, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 35, height: 35)) return Path(path.cgPath) } } struct Message: Identifiable, Equatable { var id: Date var message: String var myMsg: Bool var profilePic: String var photo: Data? } class Messages: ObservableObject { @Published var messages: [Message] = [] init() { let strings = ["Hii", "Hello!!", "What's up?", "What Are you doing?", "Nothing, just enjoying quarantine holidays.. you??", "Same :))", "Ohhh", "What about your country?", "Very very bad..", "Ok, be safe.", "Ok", "Bye"] for i in 0..<strings.count { // simple logic for two side message View messages.append(Message(id: Date(), message: strings[i], myMsg: i % 2 == 0, profilePic: i % 2 == 0 ? "p1" : "p2")) } } func writeMessage(id: Date, msg: String, photo: Data?, myMsg: Bool, profilePic: String) { messages.append(Message(id: id, message: msg, myMsg: myMsg, profilePic: profilePic, photo: photo)) } } CustomImageView: struct CustomImageView: View { private let threeColumnGrid = [ GridItem(.flexible(minimum: 40)), GridItem(.flexible(minimum: 40)), GridItem(.flexible(minimum: 40)), ] var body: some Scene { LazyVGrid(columns: threeColumnGrid, alignment: .center) { ForEach(model.imageNames, id: \.self) { item in GeometryReader { gr in Image(item) .resizable() .scaledToFill() .frame(height: gr.size.width) } .clipped() .aspectRatio(1, contentMode: .fit) } } } }
1
0
1.1k
Mar ’22
SwiftUI: Change List row Highlight colour when tapped
The default colour of a list row when tapped is grey. I try many solution on stackoverflow and apple form, I did not solve problem, any idea? RecentRowView: struct RecentRowView: View {         var body: some View {            HStack(spacing: 15){       List{         NavigationLink(destination: SecondView()                           ){                 VStack{         HStack{             VStack(alignment: .leading, spacing: 8, content: {                             Text(recent.name)                 .font(.custom("Helvetica Neue", size: 14))                               })           Spacer(minLength: 10)           ZStack {                 }           }  }          }         }        }     }    }
Replies
1
Boosts
0
Views
4k
Activity
Sep ’21
Change icons border when click the bottom tab bar in Swift
I have custom bottom navigation bar in IOS application, everythings work very well, and I want to change bottom navigation items tint color when I click the items, and I was use the self.imgView.image!.withRenderingMode(.alwaysTemplate) self.imgView.tintColor = .red in isSelected, and it is change whole icons border tint color. I do not know where I miss, any idea? RootStackTabViewController: class RootStackTabViewController: UIViewController { @IBOutlet weak var bottomStack: UIStackView! var currentIndex = 0 lazy var tabs: [StackItemView] = { var items = [StackItemView]() for _ in 0..<5 { items.append(StackItemView.newInstance) } return items }() lazy var tabModels: [BottomStackItem] = { return [ BottomStackItem(title: "Home", image: "home"), BottomStackItem(title: "Favorites", image: "heart"), BottomStackItem(title: "Search", image: "search"), BottomStackItem(title: "Profile", image: "user"), BottomStackItem(title: "Settings", image: "settings") ] }() override func viewDidLoad() { super.viewDidLoad() self.setupTabs() } func setupTabs() { for (index, model) in self.tabModels.enumerated() { let tabView = self.tabs[index] model.isSelected = index == 0 tabView.item = model tabView.delegate = self self.bottomStack.addArrangedSubview(tabView) } } } StackItemView: protocol StackItemViewDelegate: AnyObject { func handleTap(_ view: StackItemView) } class StackItemView: UIView { @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var imgView: UIImageView! @IBOutlet weak var highlightView: UIView! private let higlightBGColor = UIColor(hexString: "1160FB") static var newInstance: StackItemView { return Bundle.main.loadNibNamed( StackItemView.className(), owner: nil, options: nil )?.first as! StackItemView } weak var delegate: StackItemViewDelegate? override func awakeFromNib() { super.awakeFromNib() self.addTapGesture() } var isSelected: Bool = false { willSet { self.updateUI(isSelected: newValue) self.titleLabel.textColor = UIColor.white self.imgView.image!.withRenderingMode(.alwaysTemplate) self.imgView.tintColor = .red } } var item: Any? { didSet { self.configure(self.item) } } private func configure(_ item: Any?) { guard let model = item as? BottomStackItem else { return } self.titleLabel.text = model.title self.imgView.image = UIImage(named: model.image) self.isSelected = model.isSelected } private func updateUI(isSelected: Bool) { guard let model = item as? BottomStackItem else { return } model.isSelected = isSelected let options: UIView.AnimationOptions = isSelected ? [.curveEaseIn] : [.curveEaseOut] UIView.animate(withDuration: 0.4, delay: 0.0, usingSpringWithDamping: 1.0, initialSpringVelocity: 0.5, options: options, animations: { self.titleLabel.text = isSelected ? model.title : "" let color = isSelected ? self.higlightBGColor : .white self.highlightView.backgroundColor = color (self.superview as? UIStackView)?.layoutIfNeeded() }, completion: nil) } } extension StackItemView { func addTapGesture() { let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleGesture(_:))) self.addGestureRecognizer(tapGesture) } @objc func handleGesture(_ sender: UITapGestureRecognizer) { self.delegate?.handleTap(self) } }
Replies
1
Boosts
0
Views
1.2k
Activity
Jul ’21
How we can use userInteractionEnabled in (number.name) for number only?
I have number.name array like 1.go, 2.java, 3.swift etc..and I do not want to edit the number again, user will only change name. Is it possible?   if words.count == 24 {         for (index, textField) in textFields.enumerated() {           textField.delegate = self           textField.firstDesign()           textField.text = "\(index + 1). \(words[index])"           mneArr.append(words[index])         }
Replies
3
Boosts
0
Views
514
Activity
Jul ’21
How can I use the searchable feature for my row data in SwiftUI?
I have data in row like  Text(data.user) and I want to use searchable for it, I can use search bar, bat I want to use filter for user.    Text(data.user)                   .searchable(text: $searchText, placement: .navigationBarDrawer) like here, tere is some example for filter, but how can I use it for my data. Any idea? .onChange(of: searchText) { searchText in       if !searchText.isEmpty {         articles = sampleArticles.filter { $0.title.contains(searchText) }     } else {         articles = sampleArticles     } }
Replies
3
Boosts
0
Views
580
Activity
Sep ’21
Why we are not enable to hide bottom nav bar in SwiftUI still?
I am have a problem in general in SwiftUI, when we click any items we are open new view, but bottom nav bar still not hide, why there is not any solution in SwiftUI still?
Replies
0
Boosts
0
Views
311
Activity
Feb ’22
How we can use grid view for buttons in SwiftUI?
I want to use many buttons like background have custom colors with grid view in swiftUI, is it possible? I know how to use grid layout for images, but I have confused to use for custom colors.
Replies
0
Boosts
0
Views
367
Activity
Feb ’22
How can use model in view shortly?
I have small restaurans data in content view, but I want to use this data shortly inside of the homeview, I am typing   to use  @State var restaurants: [ Restaurant] but in other view I have HomeView, it is throw an error like     Cannot convert value of type '[Restaurant].Type' to expected argument type '[Restaurant]' for    HomeView( restaurants: [Restaurant]) line of code, I do not know what I missed? Any idea? struct HomeView: View { @State var restaurants = [ Restaurant(name: "Cafe Deadend", image: "cafedeadend"), Restaurant(name: "Homei", image: "homei"), Restaurant(name: "Teakha", image: "teakha"), Restaurant(name: "Cafe Loisl", image: "cafeloisl"), ] }
Replies
0
Boosts
0
Views
341
Activity
Feb ’22
Is it possible to use custom emoji in SwiftUI?
I am searching for a long time, how we can use custom emoji in SwiftUI, for a chat app, there is some example on internet but they are not for custom emoji, is it possible in SwiftUI?
Replies
1
Boosts
0
Views
1.3k
Activity
Feb ’22
Why I am not succes to register in my app in SwiftUI?
I am use firebase for my SwiftUI App, and I want to register with mail, but when I typing my mail it is throw an error like Oops! Something went wrong. Please try again. I do not know why? here is my code: StatusViewModel: class StatusViewModel: Identifiable, ObservableObject {       var title: String   var message: String       init(title: String = "", message: String = "") {     self.title = title     self.message = message   }       static var signUpSuccessStatus: StatusViewModel {     return StatusViewModel(title: "Successful", message: "Your account has been created successfully")   }       static var logInSuccessStatus: StatusViewModel {     return StatusViewModel(title: "Successful", message: "Your account has been logged in successfully")   }       static var errorStatus: StatusViewModel {     return StatusViewModel(title: "Error", message: "Oops! Something went wrong. Please try again.")   } } RegisterViewModel: import Foundation import Combine class RegisterViewModel: ObservableObject {   @Published var email: String = ""   @Published var password: String = ""   @Published var statusViewModel: StatusViewModel?   @Published var state: AppState       private var cancellableBag = Set<AnyCancellable>()   private let authAPI: AuthAPI       init(authAPI: AuthAPI, state: AppState) {     self.authAPI = authAPI     self.state = state   }       func signUp() {     authAPI.signUp(email: email, password: password)       .receive(on: RunLoop.main)       .map(resultMapper)       .replaceError(with: StatusViewModel.errorStatus)       .assign(to: \.statusViewModel, on: self)       .store(in: &cancellableBag)   } } extension RegisterViewModel {   private func resultMapper(with user: User?) -> StatusViewModel {     if user != nil {       state.currentUser = user       return StatusViewModel.signUpSuccessStatus     } else {       return StatusViewModel.errorStatus     }   } } struct Register: View {       @ObservedObject private var viewModel: RegisterViewModel   @State var pushActive = false         init(state: AppState) {           self.viewModel = RegisterViewModel(authAPI: AuthService(), state: state)           }   var body: some View {   NavigationLink(destination: HomeView(state: viewModel.state),                       isActive: self.$pushActive) {                 Button {                              self.viewModel.signUp()                                     } label: {                   Text("Register")                     .padding()                                     }               } } }
Replies
0
Boosts
0
Views
561
Activity
Mar ’22
How we can use the multiple register screen in SwiftUI for firebase?
I have multiple register screen in swiftUI, I did not understand how I will connect first register screen to second register screen, normally first register screen connect to main screen, but I want to connect first register screen to second register screen, and connect second register screen to main screen, how can I do it, any idea? StatusViewModel: class StatusViewModel: Identifiable, ObservableObject {       var title: String   var message: String       init(title: String = "", message: String = "") {     self.title = title     self.message = message   }       static var signUpSuccessStatus: StatusViewModel {     return StatusViewModel(title: "Successful", message: "Your account has been created successfully")   }       static var logInSuccessStatus: StatusViewModel {     return StatusViewModel(title: "Successful", message: "Your account has been logged in successfully")   }       static var errorStatus: StatusViewModel {     return StatusViewModel(title: "Error", message: "Oops! Something went wrong. Please try again.")   } } RegisterViewModel: import Foundation import Combine class RegisterViewModel: ObservableObject {   @Published var email: String = ""   @Published var password: String = ""   @Published var statusViewModel: StatusViewModel?   @Published var state: AppState       private var cancellableBag = Set<AnyCancellable>()   private let authAPI: AuthAPI       init(authAPI: AuthAPI, state: AppState) {     self.authAPI = authAPI     self.state = state   }       func signUp() {     authAPI.signUp(email: email, password: password)       .receive(on: RunLoop.main)       .map(resultMapper)       .replaceError(with: StatusViewModel.errorStatus)       .assign(to: \.statusViewModel, on: self)       .store(in: &cancellableBag)   } } extension RegisterViewModel {   private func resultMapper(with user: User?) -> StatusViewModel {     if user != nil {       state.currentUser = user       return StatusViewModel.signUpSuccessStatus     } else {       return StatusViewModel.errorStatus     }   } } first register screen: struct Register: View {       @ObservedObject private var viewModel: RegisterViewModel   @State var pushActive = false         init(state: AppState) {           self.viewModel = RegisterViewModel(authAPI: AuthService(), state: state)           }   var body: some View {  VStack(){                               TextField("Email Address",text:$viewModel.email)                 .autocapitalization(.none)                 .padding()                  HStack(spacing: 15){                     TextField("Password", text: $viewModel.password)                       .autocapitalization(.none)                                 }   NavigationLink(destination: HomeView(state: viewModel.state),                       isActive: self.$pushActive) {                 Button {                              self.viewModel.signUp()                                     } label: {                   Text("Register")                     .padding()                                     }               } } } second register screen: struct SecondRegister: View {   var body: some View {           GeometryReader { geometry in          ZStack{           VStack(alignment: .center, spacing: 3){                          TextField("First Name",text:self.$first_name)                 .autocapitalization(.none)                 .padding()               TextField("Last Name", text: self.$last_name)                 .autocapitalization(.none)                 .padding()                                 }                 Button {                 } label: {                   Text("Next")                     .padding()                    }             }           }.padding()           }.padding(.top,60)                 }     }
Replies
0
Boosts
0
Views
576
Activity
Mar ’22
Why I am able to register user info to firebase in SwiftUI App?
I have register screen and I am not able to register info to firebase, I put user info on simulator, but it just hold on on screen, and no any change on firebase, any idea? where I missed? import SwiftUI import Firebase struct Register: View {   @State var name = ""   @State var about = ""       @Binding var show : Bool   var body: some View {    VStack(alignment: .center, spacing: 3){                          TextField("Name",text:self.$name)                 .padding()                                       TextField(" about", text: self.$about)                 .padding()                if self.loading{                                          HStack{                                              Spacer()                                              Indicator()                                              Spacer()                     }                   }                                        else{                                 Button {                                       if self.name != "" && self.about != "" {                                                    self.loading.toggle()                     CreateUser(name: self.name, about: self.about) { (status) in                                                          if status{                                                              self.show.toggle()                                                       }                         }                       }                     else{                                                    self.alert.toggle()                                             }                 } label: {                   Text("Next")                     .padding()                    }               } } import Foundation import Firebase func CreateUser(name: String,about : String, completion : @escaping (Bool)-> Void){       let db = Firestore.firestore()       let storage = Storage.storage().reference()       let uid = Auth.auth().currentUser?.uid                   db.collection("users").document(uid!).setData(["name":name,"about":about, "uid":uid!]) { (err) in                   if err != nil{                       print((err?.localizedDescription)!)           return         }                   completion(true)                   UserDefaults.standard.set(true, forKey: "status")                   UserDefaults.standard.set(name, forKey: "UserName")                   NotificationCenter.default.post(name: NSNotification.Name("statusChange"), object: nil)       }     }
Replies
0
Boosts
0
Views
640
Activity
Mar ’22
Why I am not able to use two screen for registration in SwiftUI?
I have register screen in SwiftUI, and I want to use two screen for register users, one view have mail and password, and other view have name surname and occupation, but I am still do not understand how I will connect both register view, any idea? RegistrationViewModel: enum RegistrationState { case successfullyRegistered case failed(error: Error) case na } protocol RegistrationViewModel { func create() var service: RegistrationService { get } var state: RegistrationState { get } var hasError: Bool { get } var newUser: RegistrationCredentials { get } init(service: RegistrationService) } final class RegistrationViewModelImpl: ObservableObject, RegistrationViewModel { let service: RegistrationService @Published var state: RegistrationState = .na @Published var newUser = RegistrationCredentials(email: "", password: "", firstName: "", lastName: "", occupation: "") @Published var hasError: Bool = false private var subscriptions = Set<AnyCancellable>() init(service: RegistrationService) { self.service = service setupErrorSubscription() } func create() { service .register(with: newUser) .sink { [weak self] res in switch res { case .failure(let error): self?.state = .failed(error: error) default: break } } receiveValue: { [weak self] in self?.state = .successfullyRegistered } .store(in: &subscriptions)}} private extension RegistrationViewModelImpl { func setupErrorSubscription() { $state .map { state -> Bool in switch state { case .successfullyRegistered, .na: return false case .failed: return true}} .assign(to: &$hasError)}} firstscreen: struct RegisterView: View { @StateObject private var viewModel = RegistrationViewModelImpl( service: RegistrationServiceImpl() ) var body: some View { NavigationView { VStack(spacing: 32) { VStack(spacing: 16) { InputTextFieldView(text: $viewModel.newUser.email, placeholder: "Email", keyboardType: .emailAddress, systemImage: "envelope") InputPasswordView(password: $viewModel.newUser.password, placeholder: "Password", systemImage: "lock") } ButtonView(title: "Next") { viewModel.create() } } .padding(.horizontal, 15) .alert(isPresented: $viewModel.hasError, content: { if case .failed(let error) = viewModel.state { return Alert( title: Text("Error"), message: Text(error.localizedDescription)) } else { return Alert( title: Text("Error"), message: Text("Something went wrong")) }})}}} secondscreen: import SwiftUI struct SecondRegisterView: View { @StateObject private var viewModel = RegistrationViewModelImpl( service: RegistrationServiceImpl() ) var body: some View { NavigationView { VStack(spacing: 32) { VStack(spacing: 16) { InputTextFieldView(text: $viewModel.newUser.firstName, placeholder: "First Name", keyboardType: .namePhonePad, systemImage: nil) InputTextFieldView(text: $viewModel.newUser.lastName, placeholder: "Last Name", keyboardType: .namePhonePad, systemImage: nil) InputTextFieldView(text: $viewModel.newUser.occupation, placeholder: "Occupation", keyboardType: .namePhonePad, systemImage: nil) } ButtonView(title: "Sign up") { viewModel.create() } } .padding(.horizontal, 15) .navigationTitle("Register") .applyClose() .alert(isPresented: $viewModel.hasError, content: { if case .failed(let error) = viewModel.state { return Alert( title: Text("Error"), message: Text(error.localizedDescription)) } else { return Alert( title: Text("Error"), message: Text("Something went wrong")) } }) } } }
Replies
1
Boosts
0
Views
822
Activity
Mar ’22
Why I am not able to use mobile authentication for firebase in SwiftUI project?
I have a problem in my SwiftUI project, I try to use mobile authentication with firebase, when I put my number and click the button , it is throw an error as a If app delegate swizzling is disabled, remote notifications received by UIApplicationDelegate need to be forwarded to FIRAuth's canHandleNotification: method. I am still do not understand what I missed? @State var no = "" @State var show = false @State var msg = "" @State var alert = false @State var ID = "" var body : some View{ VStack{ TextField("No",text:self.$no) NavigationLink(destination: CodeView(show: $show, ID: $ID), isActive: $show) { Button { PhoneAuthProvider.provider().verifyPhoneNumber(self.no, uiDelegate: nil) { (ID, err) in if err != nil{ self.msg = (err?.localizedDescription)! self.alert.toggle() return } self.ID = ID! self.show.toggle() } } label: { Text("OK") .padding() } } } .alert(isPresented: $alert) { Alert(title: Text("Error"), message: Text(self.msg), dismissButton: .default(Text("Ok"))) } } CodeView: @State var scode = "" @State var show = false @State var msg = "" @State var alert = false @State var ID = "" VStack { TextField("SMS Code", text: self.$scode) NavigationLink(destination: HomeView(), isActive: $show) { Button { let credential = PhoneAuthProvider.provider().credential(withVerificationID: self.ID, verificationCode: self.scode) Auth.auth().signIn(with: credential) { (res, err) in if err != nil{ self.msg = (err?.localizedDescription)! self.alert.toggle() return } UserDefaults.standard.set(true, forKey: "status") NotificationCenter.default.post(name: NSNotification.Name("statusChange"), object: nil) } } label: { Text("Next") .padding() } } .alert(isPresented: $alert) { Alert(title: Text("Error"), message: Text(self.msg), dismissButton: .default(Text("Ok"))) } MyApp: import SwiftUI import Firebase @main struct App: App { init() { FirebaseApp.configure() } var body: some Scene { WindowGroup { ZStack{ ContentView() } } } }
Replies
1
Boosts
0
Views
1.7k
Activity
Mar ’22
How can I use custom image instead of the ImagePicker in SwiftUI?
I have simple chat app, and it is work for image picker, but I have custom image view and it fetch the images from internet, I want to use them instead of the image picker in my phone, but I did not find any solution, is there any idea about it? struct Home: View { @State var message = "" @State var imagePicker = false @State var imgData: Data = Data(count: 0) @StateObject var allMessages = Messages() var body: some View { ZStack { VStack { VStack { // Displaying Message ScrollView(.vertical, showsIndicators: true) { ScrollViewReader { reader in VStack(spacing: 20) { ForEach(allMessages.messages) { msg in ChatBubble(msg: msg) } .onChange(of: allMessages.messages) { value in if value.last!.myMsg { reader.scrollTo(value.last?.id) }}}}}}} .clipShape(RoundedRectangle(cornerRadius: 35))} VStack { HStack(spacing: 15) { HStack(spacing: 15) { TextField("Message", text: $message) Button(action: { // toggling image picker imagePicker.toggle() }) { Image(systemName: "paperclip.circle.fill") .font(.system(size: 22)) .foregroundColor(.gray)} .background(Color.black.opacity(0.06)) .clipShape(Capsule()) if message != "" { Button(action: { withAnimation(.easeIn) { allMessages.messages.append(Message(id: Date(), message: message, myMsg: true, profilePic: "p1", photo: nil)) } message = "" }) { Image(systemName: "paperplane.fill") .font(.system(size: 22)) .foregroundColor(Color("Color")) // rotating the image .rotationEffect(.init(degrees: 45)) .clipShape(Circle())}}} .padding(.bottom) .padding(.horizontal) .background(Color.white) .animation(.easeOut) } .fullScreenCover(isPresented: $imagePicker, onDismiss: { if imgData.count != 0 { allMessages.writeMessage(id: Date(), msg: "", photo: imgData, myMsg: true, profilePic: "p1") } }) { ImagePicker(imagePicker: $imagePicker, imgData: $imgData) }}}} struct ChatBubble: View { var msg: Message var body: some View { HStack(alignment: .top, spacing: 10) { if msg.myMsg { if msg.photo == nil { Text(msg.message) .padding(.all) .background(Color.black.opacity(0.06)) .clipShape(BubbleArrow(myMsg: msg.myMsg)) } else { Image(uiImage: UIImage(data: msg.photo!)!) .resizable() .frame(width: UIScreen.main.bounds.width - 150, height: 150) .clipShape(BubbleArrow(myMsg: msg.myMsg)) } Image(msg.profilePic) .resizable() .frame(width: 30, height: 30) .clipShape(Circle()) } else { Image(msg.profilePic) .resizable() .frame(width: 30, height: 30) .clipShape(Circle()) if msg.photo == nil { Text(msg.message) .foregroundColor(.white) .padding(.all) .background(Color("Color")) .clipShape(BubbleArrow(myMsg: msg.myMsg)) } else { Image(uiImage: UIImage(data: msg.photo!)!) .resizable() .frame(width: UIScreen.main.bounds.width - 150, height: 150) .clipShape(BubbleArrow(myMsg: msg.myMsg))}}} .id(msg.id)}} struct RoundedShape: Shape { func path(in rect: CGRect) -> Path { let path = UIBezierPath(roundedRect: rect, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 35, height: 35)) return Path(path.cgPath) } } struct Message: Identifiable, Equatable { var id: Date var message: String var myMsg: Bool var profilePic: String var photo: Data? } class Messages: ObservableObject { @Published var messages: [Message] = [] init() { let strings = ["Hii", "Hello!!", "What's up?", "What Are you doing?", "Nothing, just enjoying quarantine holidays.. you??", "Same :))", "Ohhh", "What about your country?", "Very very bad..", "Ok, be safe.", "Ok", "Bye"] for i in 0..<strings.count { // simple logic for two side message View messages.append(Message(id: Date(), message: strings[i], myMsg: i % 2 == 0, profilePic: i % 2 == 0 ? "p1" : "p2")) } } func writeMessage(id: Date, msg: String, photo: Data?, myMsg: Bool, profilePic: String) { messages.append(Message(id: id, message: msg, myMsg: myMsg, profilePic: profilePic, photo: photo)) } } CustomImageView: struct CustomImageView: View { private let threeColumnGrid = [ GridItem(.flexible(minimum: 40)), GridItem(.flexible(minimum: 40)), GridItem(.flexible(minimum: 40)), ] var body: some Scene { LazyVGrid(columns: threeColumnGrid, alignment: .center) { ForEach(model.imageNames, id: \.self) { item in GeometryReader { gr in Image(item) .resizable() .scaledToFill() .frame(height: gr.size.width) } .clipped() .aspectRatio(1, contentMode: .fit) } } } }
Replies
1
Boosts
0
Views
1.1k
Activity
Mar ’22
Can pass my data in Web View form for SwiftUI?
I have a register view and when I complete my register, I want to pass register data in form from WebView, is there any way to do it?
Replies
0
Boosts
0
Views
569
Activity
Mar ’22