SwiftUI: Menu
Uygulamalarınızda menü oluşturmayı keşfedin!
Bu yazımızda SwiftUI ile Menu ve ContextMenu kullanarak uygulamalarımıza iOS ve özellikle iPadOS’te oldukça yaygın olan menüleri nasıl ekleyeceğimizi keşfediyor olacağız. Hadi işe koyulalım.
Giriş
İşe ilk olarak bir butona dokunduktan sonra açılan basit bir menü kodlamayla başlayalım.
struct ContentView: View {
var body: some View {
Menu(“Menü”) {
Button(“Kopyala”) { }
Button(“Paylaş”) { }
Button(“Kaydet”) { }
}
.font(.largeTitle)
}
}Aşırı basit bir menü oluşturduk, ama şüphesiz daha iyisini yapabiliriz. Mesela menüyü açan ve içerisindeki butonları basit bir Text görünümü yerine bir Label görünümüne çevirebiliriz.
struct ContentView: View {
var body: some View {
Menu {
Button(action: { }) {
Label(“Kaydet”, systemImage: “square.and.arrow.down”)
}
Button(action: { }) {
Label(“Kopyala”, systemImage: “doc.on.doc”)
}
Button(action: { }) {
Label(“Paylaş”, systemImage: “square.and.arrow.up”)
}
} label: {
Label(“Menü”, systemImage: “slider.horizontal.3”)
}
.font(.largeTitle)
}
}Çok daha iyi. 😄 Eğer daha önce SwiftUI ile List görünümlerini kullandıysanız eminim ki Section ile de karşılaşmışsınızdır. Section eğer isterseniz Menu ile de kullanılabiliyor.
Section
Şimdi bir adım daha ileri gidelim ve menümüzde bir Section oluşturup içine bir silme butonu ekleyelim. Menu görünümlerinde görüntülenmeyeceğinden bir Section başlığı eklememize gerek yok.
struct ContentView: View {
var body: some View {
Menu {
Section {
Button(role: .destructive, action: { }, label: {
Label("Sil", systemImage: "trash")
})
}
Button(action: { }) {
Label(“Kaydet”, systemImage: “square.and.arrow.down”)
}
Button(action: { }) {
Label(“Kopyala”, systemImage: “doc.on.doc”)
}
Button(action: { }) {
Label(“Paylaş”, systemImage: “square.and.arrow.up”)
}
}label: {
Label(“Menü”, systemImage: “slider.horizontal.3”)
}
.font(.largeTitle)
}
}Button görünümünün role parametresine dikkat edin! Girdiğimiz .destructive değeri ile silme butonunun menüdeki renginin kırmızı olmasını sağlıyoruz.
Alt Menüler
Eğer daha kompleks ve daha çok seçenek içeren menüler oluşturmak isterseniz bütün butonları alt alta dizmek pek de iyi bir fikir olmayabilir — bir menünün bütün ekranı kaplaması hem iyi bir tasarım hem de kullanıcı deneyimi olmazdı.
Get M. Bertan Tarakçıoğlu’s stories in your inbox
Join Medium for free to get updates from this writer.
Neyseki bunun için imdadımıza alt menüler yetişiyor. Bir alt menü oluşturmak için yapmanız gereken şey: menünüzün içine başka bir menü eklemek! İçgüdüsel tasarım diye işte ben buna derim. 😄
struct ContentView: View {
var body: some View {
Menu {
Section {
Button(role: .destructive, action: { }, label: {
Label("Sil", systemImage: "trash")
})
}
Menu {
Button(action: { }) {
Label("Dosya Hakkında", systemImage: "info.circle") }
Button(action: { }) {
Label("Arşivle", systemImage: "doc.zipper")
}
}label: {
Label("Daha Fazla", systemImage: "ellipsis.circle")
}
Button(action: { }) {
Label(“Kaydet”, systemImage: “square.and.arrow.down”)
}
Button(action: { }) {
Label(“Kopyala”, systemImage: “doc.on.doc”)
}
Button(action: { }) {
Label(“Paylaş”, systemImage: “square.and.arrow.up”)
}
}label: {
Label(“Menü”, systemImage: “slider.horizontal.3”)
}
.font(.largeTitle)
}
}
Primary Action
Şimdiyse de iOS15 ve sonrasında kullanılabilen yeni bir özellikten bahsetmek istiyorum: Primary Action. Menu görünümüne yeni eklenen primaryAction parametresini kullanarak üstüne dokunulduğunda belirli bir işlemi gerçekleştiren ve basılı tutulduğunda bir menü görüntüleyen bir buton oluşturabilirsiniz.
Yapmamız gereken tek şey aynı bir butonun action parametresindeki gibi primaryAction parametresinin için yapmak istediğimiz işlemin kodunu yazmak — basılı tutulduğunda da zaten menü açılıyor.
struct ContentView: View {
var body: some View {
Menu {
Button(action: {
// Hediye etme kodu…
}) {
Label(“Hediye Et”, systemImage: “gift”)
}
} label: {
Label(“Satın Al”, systemImage: “tag”)
} primaryAction: {
// Satın alma kodu…
}
.font(.largeTitle)
}
}ContextMenu
Son olarak da .contextMenu niteleyecisini inceleyelim. Context Menu, kendisine uygulanan görünüme iOS’te üzerine basılığı tuttuğunuza da macOS’te üzerine sağ tıkladığınızda açılan menüler olarak tanımlanabilir. Yazılım ve temel mantığı menü ile aynı, ve Primary Action dışında Menu hakkında konuştuğumuz her şey Context Menu için de geçerli.
Bir çok SwiftUI görünümü .defaultAction niteleyicisini kabul etmekte. Liste elemanları, görseller, metinler, özel görünümler…
Bu örnekte bir kedi fotoğrafına Context Menu ekliyor olacağız. 🐈
struct ContentView: View {
var body: some View {
Image("cat")
.resizable()
.scaledToFit()
.frame(width: 400)
.cornerRadius(15)
.contextMenu {
Button(action: { }) {
Label("Paylaş", systemImage: "square.and.arrow.up")
}
Button(action: { }) {
Label("Favorilere Ekle", systemImage: "star")
}
}
}
}Bu menüler sizin de fark etmiş olabileceğiniz gibi 3D/Haptic Touch ile çalışmakta. Bence oldukça havalı. 😎
Şimdilik hepsi bu kadar! Umuyorum ki bu makalede öğrendikleriniz uygulamalarınızı geliştirirken işinize yarar. Kendinize çok iyi bakın. 🙂










