Как изменить цвет кнопки «Отмена» UIImagePickerController в SwiftUI

#ios #swift #swiftui

#iOS #swift #swiftui

Вопрос:

UIImagePickerController Cancel По какой-то причине у меня есть белая кнопка, из-за чего ее очень трудно увидеть…

введите описание изображения здесь

Вот мой ImagePicker класс:

 struct ImagePicker: UIViewControllerRepresentable {
    
    let key: String
    @Binding var uiImage: UIImage?
    @Environment(.presentationMode) var presentationMode
    
    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }
    
    func makeUIViewController(context: Context) -> UIImagePickerController {
        let controller = UIImagePickerController()
        controller.navigationBar.topItem?.rightBarButtonItem?.tintColor = UIColor.orange
        controller.navigationBar.topItem?.leftBarButtonItem?.tintColor = UIColor.orange
        controller.navigationBar.backItem?.leftBarButtonItem?.tintColor = UIColor.orange
        controller.sourceType = .photoLibrary
        controller.delegate = context.coordinator
        return controller
    }
    func updateUIViewController(_ uiViewController: UIImagePickerController, context: Context) {
        
    }
    
    class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate{
        var parent: ImagePicker
        init(_ parent: ImagePicker) {
            self.parent = parent
        }
        
        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
            if let img = info[.originalImage] as? UIImage {
                parent.uiImage = img
            }
            parent.presentationMode.wrappedValue.dismiss()
        }
    }
    
}

struct Dialog: View {
    @Binding var dialogKey: String?
    @Binding var showImagePicker: Bool
    @Binding var changed: Bool
    @Binding var uiImage: UIImage?
    @Binding var loadingKey: String?
    @State var noImage = false
    
    var body: some View {
        HStack(spacing: 0) {
            Button(action: { self.showImagePicker.toggle() }){
                    Text(noImage ? "Add" : "Replace")
                        .frame(width: 80)
                        .multilineTextAlignment(.center)
                        .font(.custom("Seravek-Bold", size: 15))
                        .foregroundColor(Color.white)
                        .padding(.vertical, 15)
                        .background(
                            Rectangle()
                                .fill(Color("Meeq"))
                        )
                        .cornerRadius(radius: 5, corners: [.topLeft, .bottomLeft])
                        .shadow(color: Color.black.opacity(0.5), radius: 1, x: 0, y: 1)
                }
            Button(action: { self.deleteImage() }){
                    Text("Delete")
                        .frame(width: 80)
                        .multilineTextAlignment(.center)
                        .font(.custom("Seravek-Bold", size: 15))
                        .padding(.vertical, 15)
                        .foregroundColor(Color.white)
                        .background(
                            Rectangle()
                                .fill(Color("Exit"))
                        )
                        .shadow(color: Color.black.opacity(0.5), radius: 1, x: 0, y: 1)
                        .opacity(noImage ? 0.3 : 1.0)
            }
            .disabled(noImage)
            .onAppear {
                // Check if there's no image for the selected circle
                if let dialogKey = dialogKey {
                    let key = UserDefaults.standard.string(forKey: dialogKey)
                    if key == nil { noImage = true }
                    print("Delete onAppear: (key)")
                    
                }
            }
            Button(action: { self.dialogKey = nil }){
                    Text("Cancel")
                        .frame(width: 80)
                        .multilineTextAlignment(.center)
                        .font(.custom("Seravek-Bold", size: 15))
                        .foregroundColor(Color.white)
                        .padding(.vertical, 15)
                        .background(
                            Rectangle()
                                .fill(Color.gray)
                        )
                        .cornerRadius(radius: 5, corners: [.topRight, .bottomRight])
                        .shadow(color: Color.black.opacity(0.5), radius: 1, x: 1, y: 1)
                }
        }
        .sheet(isPresented: $showImagePicker, onDismiss: loadImage){
            if let key = dialogKey {
                ImagePicker(key: key, uiImage: self.$uiImage)
                    .accentColor(Color.orange)
            }
        }
    }
}
  

Как вы можете видеть, я попытался изменить цвет кнопки отмены на оранжевый с помощью приведенного выше кода:

 controller.navigationBar.topItem?.rightBarButtonItem?.tintColor = UIColor.orange
controller.navigationBar.topItem?.leftBarButtonItem?.tintColor = UIColor.orange
controller.navigationBar.backItem?.leftBarButtonItem?.tintColor = UIColor.orange
  

однако он по-прежнему белый.

Есть идеи, как я могу сделать Cancel кнопку оранжевой?

Комментарии:

1. вы пытались изменить цвет оттенка для сцены или окна?

2. Только что сделал. window.tintColor = .orange у меня SceneDelegate не изменился цвет с белого @RomanFilippov

3. попробуйте выполнить поиск по всему проекту cmd shift F для .white установки

4. Спасибо @RomanFilippov Я пробовал это, но, к сожалению, ничего не показывает

5. Здесь та же проблема! Хотелось бы услышать, был ли найден ответ … tx