Добавить изображение и текст к кнопке оповещения листа действий - PullRequest
0 голосов
/ 19 октября 2019

Я хочу иметь возможность добавлять значок и текст в AlertButton, но тип имеет тип Text?

struct NavigationAddItem: View {
    @State var showActionView = true

    var actionSheet: ActionSheet {
        ActionSheet(title: Text("Select an action"), message: nil, buttons: [
            .default(Text("Option A"), action: {
                // TODO: Enter Option A action
            }),
            .default(Text("Option B"), action: {
                // TODO: Enter Option B action
            }),
            .cancel()
        ])
    }

    var body: some View {
        Button(action: {
            self.showActionView.toggle()
        }) {
            Image(systemName: "plus")
                .font(.system(size: 24))
        }
        .actionSheet(isPresented: $showActionView, content: {
            self.actionSheet
        })
    }
}


struct NavigationItems_Previews: PreviewProvider {
    static var previews: some View {
        NavigationAddItem(showActionView: true)
    }
}

Этот код дает лист действий, но я хочу добавить изображение вслева от текста.

Текущий: enter image description here

Ищу: enter image description here

1 Ответ

1 голос
/ 19 октября 2019

Я не думаю, что в настоящее время возможно определить ваше собственное представление для кнопки в ActionSheet.

Глядя на код для ActionSheet, мы видим следующее:

@available(iOS 13.0, tvOS 13.0, watchOS 6.0, *)
@available(OSX, unavailable)
public struct ActionSheet {

    /// Creates an action sheet with the provided buttons.
    public init(title: Text, message: Text? = nil, buttons: [ActionSheet.Button] = [.cancel()])

    /// A button representing an operation of an action sheet presentation.
    public typealias Button = Alert.Button
}

Это показывает, что Button, который использует ActionSheet, типизируется в Alert.Button

Если мы посмотрим на структуру для Alert, мы увидим следующие методы:

/// A storage type for an alert presentation.
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct Alert {

    /// Creates an alert with one button.
    public init(title: Text, message: Text? = nil, dismissButton: Alert.Button? = nil)

    /// Creates an alert with two buttons.
    ///
    /// - Note: the system determines the visual ordering of the buttons.
    public init(title: Text, message: Text? = nil, primaryButton: Alert.Button, secondaryButton: Alert.Button)

    /// A button representing an operation of an alert presentation.
    public struct Button {

        /// Creates an `Alert.Button` with the default style.
        public static func `default`(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button

        /// Creates an `Alert.Button` that indicates cancellation of some
        /// operation.
        public static func cancel(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button

        /// Creates an `Alert.Button` that indicates cancellation of some
        /// operation.
        ///
        /// - Note: the label of the button is automatically chosen by the
        /// system for the appropriate locale.
        public static func cancel(_ action: (() -> Void)? = {}) -> Alert.Button

        /// Creates an `Alert.Button` with a style indicating destruction of
        /// some data.
        public static func destructive(_ label: Text, action: (() -> Void)? = {}) -> Alert.Button
    }
}

Обратите внимание, что каждая из функций, которые создают Alert.Button, это: default, cancel и destructive, принимают только метки типа Text и action типа (() -> Void)?. Это означает, что вы можете передать только представление, которое соответствует Text.

Так что попытка передать представление, которое не соответствует Text, не будет работать, как вы уже обнаружили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...