Xamarin.forms: ์†Œํ”„ํŠธ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์—†์Œ

์— ๋งŒ๋“  2018๋…„ 02์›” 22์ผ  ยท  53์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: xamarin/Xamarin.Forms

์„ค๋ช…

์†Œํ”„ํŠธ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ์€ ํ•˜๋“œ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ๊ณผ ๋™์ผํ•œ ์ฝ”๋“œ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด Android(๋ฐ ๋‚ด๊ฐ€ ์ฝ์€ iOS)์—์„œ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋™์ž‘์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋ฒˆ์‹ ๋‹จ๊ณ„

  1. MasterDetailPage์—์„œ "OnBackButtonPressed()" ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
  2. Android์—์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๊ณ  MasterDetailPage์˜ ์„ธ๋ถ€ ์ •๋ณด ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ช…๋ น ๋ชจ์Œ์—์„œ "๋’ค๋กœ" ํ™”์‚ดํ‘œ๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

ํ•˜๋“œ์›จ์–ด "๋’ค๋กœ" ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ "OnBackButtonPressed()" ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ํ–‰๋™

๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์ •๋ณด

  • ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๋ฒ„์ „:
  • ๋งˆ์ง€๋ง‰์œผ๋กœ ์•Œ๋ ค์ง„ ์–‘ํ˜ธํ•œ ๋ฒ„์ „: ์•Œ ์ˆ˜ ์—†์Œ
  • IDE: ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค 2017
  • ํ”Œ๋žซํผ ๋Œ€์ƒ ํ”„๋ ˆ์ž„์›Œํฌ:

    • ์•ˆ๋“œ๋กœ์ด๋“œ: 8.0 ์˜ค๋ ˆ์˜ค

    • UWP: UWP 16299(์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!)

  • Android ์ง€์› ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „: v7/v4
  • ๋„ˆ๊ฒŸ ํŒจํ‚ค์ง€:

NETStandard.Library {2.0.1} SQLite.Net.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Helpdesk
NETStandard.Library {2.0.1} Adapt.Model.Helpdesk
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Model.Helpdesk
System.ServiceModel.Http {4.4.1} Adapt.XivicClient.Standard
System.Reflection.TypeExtensions {4.4.0} Adapt.XivicClient.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.XivicClient.Standard
NETStandard.Library {2.0.1} Adapt.XivicClient.Standard
System.Runtime.Serialization.Pri... {4.3.0} Adapt.XivicClient.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Common.Standard
NETStandard.Library {2.0.1} Adapt.Model.Common.Standard
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Model.Common.Standard
NETStandard.Library {2.0.1} Adapt.Presentation.Standard
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Standard
System.ServiceModel.Http {4.4.1} Adapt.XivicClient.Database.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.XivicClient.Database.Standard
NETStandard.Library {2.0.1} Adapt.XivicClient.Database.Standard
System.Runtime.Serialization.Pri... {4.3.0} Adapt.XivicClient.Database.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Model.Whakatane
NETStandard.Library {2.0.1} Adapt.Model.Whakatane
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Model.Whakatane
NETStandard.Library {2.0.1} Adapt.Business.Standard
Microsoft.CSharp {4.4.1} Adapt.Business.Standard
System.ServiceModel.Primitives {4.4.1} Adapt.Data.Generic.Standard
NETStandard.Library {2.0.1} Adapt.Data.Generic.Standard
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Data.Generic.Standard
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.XamarinForms
NETStandard.Library {2.0.1} Adapt.Presentation.XamarinForms
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.XamarinForms
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.XamarinForms
Xamarin.Android.Arch.Core.Common {1.0.0} Adapt.Presentation.Android
Xamarin.Android.Arch.Lifecycle.C... {1.0.1} Adapt.Presentation.Android
Xamarin.Android.Arch.Lifecycle.R... {1.0.0} Adapt.Presentation.Android
Xamarin.Android.Support.Animated... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Annotations {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Compat {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Core.UI {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Core.Utils {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Design {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Fragment {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Media.Co... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Transition {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v4 {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.AppCo... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.CardView {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Media... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Palette {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.v7.Recyc... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Android.Support.Vector.D... {26.1.0.1} Adapt.Presentation.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.iOS
Microsoft.NETCore.UniversalWindo... {6.0.7} Adapt.Presentation.UWP
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.UWP
Esri.ArcGISRuntime.Xamarin.Android {100.2.0} Adapt.Presentation.Xivic.Android
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.Android
Microsoft.NETCore.Platforms {2.0.1} Adapt.Presentation.Xivic.Android
NETStandard.Library {2.0.1} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.Core {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.GridCommon {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfDataGrid.An... {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfNumericTextBox {15.4.0.20} Adapt.Presentation.Xivic.Android
Syncfusion.Xamarin.SfNumericText... {15.4.0.20} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Core.Common {1.0.0} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Lifecycle.C... {1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Arch.Lifecycle.R... {1.0.0} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Animated... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Annotations {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Compat {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Core.UI {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Core.Utils {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Design {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Fragment {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Media.Co... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Transition {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v4 {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.AppCo... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.CardView {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Media... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Palette {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.v7.Recyc... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Android.Support.Vector.D... {26.1.0.1} Adapt.Presentation.Xivic.Android
Xamarin.Build.Download {0.4.7} Adapt.Presentation.Xivic.Android
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Xivic.Android
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Base {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Basement {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Maps {60.1142.0} Adapt.Presentation.Xivic.Android
Xamarin.GooglePlayServices.Tasks {60.1142.0} Adapt.Presentation.Xivic.Android
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.iOS
Esri.ArcGISRuntime.Xamarin.iOS {100.2.0} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.Core {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.GridCommon {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.iOS
Syncfusion.Xamarin.SfNumericTextBox {15.4.0.20} Adapt.Presentation.Xivic.iOS
Xamarin.Forms {2.5.0.280555} Adapt.Presentation.Xivic.iOS
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.iOS
Esri.ArcGISRuntime.UWP {100.2.0} Adapt.Presentation.Xivic.UWP
Esri.ArcGISRuntime.Xamarin.Forms {100.2.0} Adapt.Presentation.Xivic.UWP
Microsoft.NETCore.UniversalWindo... {6.0.7} Adapt.Presentation.Xivic.UWP
Syncfusion.Xamarin.SfDataGrid {15.4.0.20} Adapt.Presentation.Xivic.UWP
System.Runtime.Serialization.Pri... {4.3.0} Adapt.Presentation.Xivic.UWP
Xamarin.Forms.Maps {2.5.0.280555} Adapt.Presentation.Xivic.UWP

  • ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์žฅ์น˜: HTC U11

์žฌ์ƒ์‚ฐ ๋งํฌ

์š”์ฒญํ•˜๋ฉด ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

backbutton high impact proposal-open enhancement โž•

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์šฐ์„  ์ˆœ์œ„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋‚˜๋Š” ๋•Œ๋•Œ๋กœ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ช‡ ๋…„ ๋™์•ˆ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹จ์ ์ด ์žˆ๋Š” ์ •๋ง ๋‚˜์œ ํ•ดํ‚น์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์‚ฌ์šฉ์ž ์ง€์ • ํƒ์ƒ‰ ํŽ˜์ด์ง€ ๋ Œ๋”๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค์—์„œ ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  53 ๋Œ“๊ธ€

์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ ๋น„์Šทํ•œ ํ† ๋ก ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ์ฐพ๊ณ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๊นŒ? https://forums.xamarin.com/discussion/100287/allow-a-single-place-to-handle-back-button-requests-with-async-support

@samhouts ๋„ค, ๊ทธ๊ฒƒ์€ ๊ฑฐ์˜ ์ •ํ™•ํžˆ ์šฐ๋ฆฌ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ํ•œ ์ฝœ๋ฐฑ์„ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ์˜ ์ด๋ฒคํŠธ๋ฅผ ํฌํ•จํ•˜๋„๋ก ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐœ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@samhouts ์ด ๋ฒ„๊ทธ๊ฐ€ ์•„์ง ํ—ˆ์šฉ๋ฉ๋‹ˆ๊นŒ? ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์ •๋ณด๊ฐ€ ๋” ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ?

OnBackButtonPressed๊ฐ€ Hard- ๋ฐ Software-BackButtons๋ฅผ ๋ชจ๋‘ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋‘˜ ๋ชจ๋‘๋ฅผ ๊ฐ€๋กœ์ฑ„๋Š” ๊ฒƒ์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ ์ฃผ์ œ์— ๋Œ€ํ•ด ์—ฌ๊ธฐ์—์„œ ๋ธ”๋กœ๊ทธ๋ฅผ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค: https://msicc.net/xamarin-forms-the-mvvmlight-toolkit-and-i-taking-control-over-the-back-buttons/

@MSiccDev ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ œ์‹œํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์† ๋…ธ๋ ฅํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๊ฒฐ์ฝ” ๊ณ ์ณ์ง€์ง€ ์•Š์„ ๊ฒƒ์ด๊ณ  ์‚ฌ๋žŒ๋“ค์€ ๊ธฐ์ˆ ์ด ์ฃฝ์„ ๋•Œ๊นŒ์ง€ ๊ณ„์†ํ•ด์„œ ์Šค์Šค๋กœ ์ด ์ผ์„ ๊ณ„์†ํ•ด์•ผ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@AceCoderLaura ํ•œ์ชฝ์€ ์‚ฌ์‹ค์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ์•ž์œผ๋กœ ๋‚˜์•„๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋˜ ๋ฌธ์ œ๋ฅผ ๋ณด๊ณ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋ฃจํŠธ ํŽ˜์ด์ง€์˜ ํ–„๋ฒ„๊ฑฐ ๋ฉ”๋‰ด๋ฅผ ๊นจ๋œจ๋ฆฝ๋‹ˆ๋‹ค...
-.-

@AceCoderLaura MD ํŽ˜์ด์ง€๊ฐ€ ์žˆ๋Š” ๋‚ด ์•ฑ ์ค‘ ํ•˜๋‚˜์—์„œ ๋ฌธ์ œ ์—†์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค...

@MSiccDev
๋‚ด ํ•ดํ‚น ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

public override bool OnOptionsItemSelected(IMenuItem item) 
{ 
            //If it's not the "home" button continue as usual 
            var androidHomeId = 16908332; 
            if (item.ItemId != Resource.Id.home && item.ItemId != androidHomeId) return base.OnOptionsItemSelected(item); 

            var navigation = App.MainMasterDetailPage.Detail.Navigation; 
            if (navigation.NavigationStack.Count > 1) 
            { 
                //We can go back, do the arrow functionality 
                this.OnBackPressed();
                return true;
            } 
            else 
            { 
                //We're at the root, do the hamburger functionality 
                return App.MainMasterDetailPage.IsPresented = true; 
            } 
}

@AceCoderLaura ํƒ์ƒ‰ ๋’ค๋กœ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ ํ›„ OnOptionsItemSelected๊ฐ€ ์‹คํ–‰๋˜์—ˆ์Šต๋‹ˆ๊นŒ oO ์ œ ๊ฒฝ์šฐ์—๋Š” ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค...(Android)

์ด ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ง„์ „์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ค‘์ฒฉ๋œ ํƒ์ƒ‰ ๋ณด๊ธฐ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋‚ด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด๋ฅผ ํŒจ์น˜ํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ํ•ดํ‚คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š”์ด ์ž ๋งˆ๋ฆฐ์œผ๋กœ ํŒจ์น˜ํ•ด์•ผํ•œ๋‹ค๋Š” @AceCoderLaura์™€ aggree.

๊ฐ™์€ ๋ฌธ์ œ. ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์•ฑ์—์„œ ๋ฐฑ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋ฃจ๋นจ๋ฆฌ ์ˆ˜์ •๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฑฐ ๊ณ ์ณ์ฃผ์„ธ์š” 1๋…„ ๊ฐ€๊นŒ์ด ๋ณด๊ณ ๋œ๊ฑด๋ฐ ์•„์ง ์•ˆํ•˜๋Š”๊ฒŒ ์›ƒ๊ธฐ๋„ค์š”.

@ddobrev ๋งž์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋งค์šฐ ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์ด์ง€๋งŒ ๋ถˆํ–‰ํžˆ๋„ ์ž‘๋™ ๋ฐฉ์‹์ด ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ ์‘๋‹ต์ด ์—†์Šต๋‹ˆ๋‹ค.

์˜ˆ, ๊ทธ๊ฒƒ์€ ๊ฑฐ์˜ ์ •ํ™•ํžˆ ์šฐ๋ฆฌ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ํ•œ ์ฝœ๋ฐฑ์„ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ์˜ ์ด๋ฒคํŠธ๋ฅผ ํฌํ•จํ•˜๋„๋ก ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐœ์„ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์„ ๋ช…ํ™•ํžˆ ์ •์˜ํ–ˆ๋‹ค๋ฉด PR์„ ํ•ด์„œ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด์œ ๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ๋‚ด ๊ฒฝ์šฐ์—๋Š” (Android์—์„œ) ์ด๊ฒƒ์„ ๋‚ด MainActivity์— ์ถ”๊ฐ€ํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

        protected override void OnPostCreate(Bundle savedInstanceState)
        {
            var toolBar = FindViewById<global::Android.Support.V7.Widget.Toolbar>(Resource.Id.toolbar);
            SetSupportActionBar(toolBar);

            base.OnPostCreate(savedInstanceState);
        }

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํƒ์ƒ‰ ๋ชจ์Œ์—์„œ ํ•˜๋“œ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ๊ณผ ์†Œํ”„ํŠธ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ OnBackButtonPressed๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์™œ ๊ทธ๋Ÿฐ์ง€ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

iOS์—์„œ๋Š” ์—ฌ์ „ํžˆ ์‚ฌ์šฉ์ž ์ •์˜ ํŽ˜์ด์ง€ ๋ Œ๋”๋Ÿฌ๋กœ ์ง์ ‘ ์ถ”๊ฐ€ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

3.6.0์—์„œ ์ˆ˜์ •๋ ๊นŒ์š”?

์‹ค์ˆ˜๋กœ ์ง„ํ–‰ ์ค‘์œผ๋กœ ์˜ฎ๊ฒจ์ง„ ๊ฒƒ ๊ฐ™์•„์š”.

@samhouts ๊ทธ๋ž˜์„œ ์ง€๊ธˆ ์‚ฌ์–‘์ด ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ์ง€์ •๋˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

@ddobrev ์šฐ๋ฆฌ๋Š” ์—ฌ์ „ํžˆ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š” ๊ฒƒ์„ ๋…ธ์ถœํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ OnBackButtonPressed๋Š” ํ•˜๋“œ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ์— ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งคํ•‘๋˜๋ฏ€๋กœ ๊ทธ ๊ธฐ๋Šฅ์ด ๋” ๋งŽ์ด ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์›ํ•˜๋Š” ๊ฒƒ์€ OnNavigatingBack ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์†Œํ”„ํŠธ์›จ์–ด ๋’ค๋กœ ํ™”์‚ดํ‘œ๋ฅผ ํ•ด๋‹น ๋ฐฉ๋ฒ•์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์ง€๊ธˆ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹ํ•ดํ‚น์— ๋” ๊ฐ€๊น๊ณ  ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด OnBackButtonPressed๋ฅผ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ 

OnHardwareBackButtonPressed ๋ฐ OnNavigatingBack

๋ญ, ์–ด๋Š ์ชฝ์ด๋“  ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ํ•ด. ์ถฉ๋ถ„ํžˆ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ์œผ๋กœ์„œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ์„๊นŒ์š”? ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ๊ด€์ฐฐํ•˜๊ณ  ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด(๋”ฐ๋ผ์„œ Task\

enum ReverseNavigationSourceType {
    Unspecified,
    HwButton,
    Navbar,
    Gesture
}

class ReverseNavigationEventArgs {
    public ReverseNavigationSourceType SourceType { get; }
    public object Source { get; }
}

class Page {
    public virtual Task<bool> OnNavigatingBack(ReverseNavigationEventArgs args) {
        return Task.FromResult(true);
    }
}

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ๋‘ ๋ฒˆ์งธ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์€ ์ด๊ฒƒ์„ INavigation ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: API๋ฅผ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

@pikausp ์†”๋ฃจ์…˜์€ ๋‚˜์—๊ฒŒ ์ตœ๊ณ ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์ด๊ฒƒ์„ ๋” ํ™•์žฅํ•˜์—ฌ "ํŽ˜์ด์ง€ ์ƒํƒœ"์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํŽ˜์ด์ง€๋Š” ํ™œ์„ฑ ๋˜๋Š” ๋น„ํ™œ์„ฑ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class PageActivationEventArgs { }
class PageDeactivationEventArgs {
    public bool IsPermanent { get; }
}
class Page {
    public virtual Task OnActivating(PageActivationEventArgs) {
        return Task.CompletedTask;
    }

    public virtual Task<bool> OnDeactivating(PageDeactivationEventArgs) {
        return Task.FromResult(true);
    }
}

Page๊ฐ€ OnDeactivating ์—์„œ ๋ฉ€์–ด์ง€๋ฉด ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค. IsPermanent ์˜ ๊ฐ’์€ ํŽ˜์ด์ง€๊ฐ€ ํƒ์ƒ‰ ์Šคํƒ์— ์œ ์ง€๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค(ํŒ์˜ ๊ฒฝ์šฐ true, ํ‘ธ์‹œ์˜ ๊ฒฝ์šฐ false).

ํƒ์ƒ‰์ด ์™„๋ฃŒ๋˜๋ฉด ํ˜ธ์ถœ๋˜๋Š” OnActivated ๋ฐ OnDeactivated ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๊ฐ•๋ ฅํ•œ ํƒ์ƒ‰ ํ๋ฆ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‹น์‹ ์˜ ์ƒ๊ฐ์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์—ฌ๊ธฐ์— ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ณด๊ณ ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์šฐ์„  ์ˆœ์œ„๋ฅผ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋‚˜๋Š” ๋•Œ๋•Œ๋กœ ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ๋ช‡ ๋…„ ๋™์•ˆ ๊ฐ€์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
ํ˜„์žฌ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹จ์ ์ด ์žˆ๋Š” ์ •๋ง ๋‚˜์œ ํ•ดํ‚น์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋‚ด ์‚ฌ์šฉ์ž ์ง€์ • ํƒ์ƒ‰ ํŽ˜์ด์ง€ ๋ Œ๋”๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค์—์„œ ์ผ๋ถ€ ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ถฉ๋Œ

์†Œํ”„ํŠธ ๋ฐฑ ๋ฒ„ํŠผ ๊ฐ€๋กœ์ฑ„๊ธฐ์— ๋Œ€ํ•œ ๋ชจ๋“  ์—…๋ฐ์ดํŠธ. ์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ์— ๋Œ€ํ•ด ์ •๋ง ๊ณ ์‹ฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒŒ์‹œ๋ฌผ์— ์–ธ๊ธ‰๋œ ์†”๋ฃจ์…˜์€ ์šฐ๋ฆฌ์—๊ฒŒ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ •๋ง๋กœ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ž์‹ ์˜ ๋„๊ตฌ ๋ชจ์Œ์„ ํ•ดํ‚นํ•˜๊ฑฐ๋‚˜ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋Ÿฌํ•œ ๋ช…๋ฐฑํ•œ ๋ˆ„๋ฝ์— ๋Œ€ํ•œ ์•ฝ๊ฐ„์˜ ๊ณผ์ž‰์ž…๋‹ˆ๋‹ค. ์ œ๋ฐœ ...

์—ฌ๊ธฐ @samhouts์— ์–ด๋–ค ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
์—ฌ๊ธฐ์—์„œ ์—ฌ๋Ÿฌ ๊ณ ๊ธ‰ ์†”๋ฃจ์…˜์ด ์ œ์•ˆ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๋“ค๋ฆฌ๋ฉฐ, ๋ชจ๋‘ ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ๋Šฅ๋„ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ์†์‹ค์„ ๋ฐฉ์ง€ํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋„ˆ๋ฌด ํ•ดํ‚คํ•ฉ๋‹ˆ๋‹ค.

์ž, ํŒ€, ์ด์ œ ์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ๊ธฐ๋Šฅ์— ๊ธฐ๋Œ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/xamarin/Xamarin.Forms/issues/6971#issuecomment -574823028

์ด์˜๊ฐ€ ์žˆ์œผ์‹ ๊ฐ€์š”?

@samhouts ์—ฐ๊ฒฐ๋œ ๋ฌธ์ œ๋ฅผ BackButtonBehavior ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋’ค๋กœ ํƒ์ƒ‰์„ ์‹œ๋„ํ•  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ช…๋ น ์ฃผ์œ„์˜ ๋ž˜ํผ(์ผ๋ถ€ ์ถ”๊ฐ€ ํฌํ•จ)์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ๊ฐ€๋กœ์ฑ„๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฐฉ๋ฒ•(์Šค์™€์ดํ”„, ํƒ์ƒ‰ ๋ชจ์Œ ๋ฒ„ํŠผ, Android ๋ฒ„ํŠผ ๋“ฑ)์„ ํ†ตํ•ด ๋’ค๋กœ ํƒ์ƒ‰์„ ์‹œ๋„ํ•  ๋•Œ ์ •ํ™•ํžˆ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋Š”์ง€ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ ๋’ค๋กœ ํƒ์ƒ‰ํ•˜๋Š” ๋Œ€์‹  ์‚ฌ์šฉ์ž๋ฅผ ์ƒˆ ํŽ˜์ด์ง€๋กœ ํƒ์ƒ‰ํ•˜๋„๋ก ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๊นŒ?

@samhouts iOS uwp ๋ฐ Android์šฉ ํ”„๋กœ๋•์…˜ ์•ฑ์—์„œ ์ž‘๋™ํ•˜๋Š” ๊ฐ€๋กœ์ฑ„๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ํŽ˜์ด์ง€ ๋ Œ๋”๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” iOS ๋ฐ Android. ์‚ฌ์šฉ์ž๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ์„ ํ†ตํ•ด ๋‹ค์‹œ ํƒ์ƒ‰ํ•  ๋•Œ "๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ทจ์†Œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?"๋ผ๋Š” ํŒ์—…์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กฌํ”„ํŠธ๋ฅผ ํ™•์ธํ•˜๋ฉด ๋’ค๋กœ ํƒ์ƒ‰์ด ์‹คํ–‰๋˜๊ณ  ํŽ˜์ด์ง€๊ฐ€ ํŒ์—…๋˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ์ž๋Š” ํ˜„์žฌ ํŽ˜์ด์ง€์— ๋จธ๋ฌด๋ฆ…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์•„์ง ๋‚ด ๊ตฌํ˜„์—์„œ ๋ˆ„๋ฝ๋œ ์Šค์™€์ดํ”„๊ฐ€ ๋’ค๋กœ๊ฐ€๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

@samhouts - ์ œ์•ˆ์„œ์—์„œ ๋’ค๋กœ ๋ฒ„ํŠผ์„ ๊ฐ€๋กœ์ฑ„์–ด ์กฐ๊ฑด๋ถ€ ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ œ์•ˆ์ด ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?

  • {Shell, NaviationPage}.BackButtonCommand๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋’ค๋กœ ๋ฒ„ํŠผ์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ๋’ค๋กœ ํƒ์ƒ‰์ด ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • {Shell, NaviationPage}.BackButtonCommand๊ฐ€ ํ• ๋‹น๋œ ๊ฒฝ์šฐ ๋’ค๋กœ ํƒ์ƒ‰์ด ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ• ๋‹น๋œ ICommand ์ธ์Šคํ„ด์Šค๋Š” Shell ์‚ฌ์šฉ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋ช…์‹œ์ ์œผ๋กœ ์ด์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

c# async Task MyProcessBackButton(bool usingShell) { bool navigateBack = await DisplayAlert("Cancel?", "Undo changes", "Yes", "No"); var mainPage = usingShell ? (Page)Shell.Current : Application.Current.MainPage; if (mainPage is MasterDetailPage mdPage) mainPage = mdPage.Detail; if (navigateBack) await mainPage.Navigation.PopAsync(); }

๊ทธ๋Ÿฐ ์ผ์ด ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•ด์•ผํ•˜์ง€๋งŒ ์„ฑ๊ฐ€์‹  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์–ด์ฉŒ๋ฉด ๋‚ด๊ฐ€ ์ œ์•ˆ์„ ์ œ๋Œ€๋กœ ๋ณด๊ณ  ์žˆ์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์ œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํ™•์ธํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

PS @nschoenberg ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‚ด ์•ฑ์—์„œ ์‚ฌ์šฉ์ž ์ง€์ • ๋ Œ๋”๋ง์„ ๊ฐ€๋กœ์ฑ„๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค(NavigationPage์—์„œ ์œ„์˜ MyProcessBackButton ๋ฉ”์„œ๋“œ์™€ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆ์„œ์— Shell์ด โ€‹โ€‹ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ด์ „ ์•ฑ์— ๋” ์‰ฝ๊ฒŒ ์ฑ„ํƒํ•  ์ˆ˜ ์žˆ์Œ).

  • {Shell, NaviationPage}.BackButtonCommand๊ฐ€ ํ• ๋‹น๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋’ค๋กœ ๋ฒ„ํŠผ์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ๋’ค๋กœ ํƒ์ƒ‰์ด ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ์ข…์ข… ์šฐ๋ฆฌ๋Š” ์žฌ์ •์˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Android์—์„œ ์žฅ์น˜ ๋’ค๋กœ ๋ฒ„ํŠผ์„ ์žฌ์ •์˜ํ•˜๊ณ  true๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์‹์œผ๋กœ๋“  ๊ทธ ๊ตฌํ˜„์„ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๊นŒ?

ํŽ˜์ด์ง€ ๊ธฐ๋Šฅ์œผ๋กœ์„œ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ์„๊นŒ์š”? ์—ญ๋ฐฉํ–ฅ ํƒ์ƒ‰์„ ๊ด€์ฐฐํ•˜๊ณ  ์ทจ์†Œํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋Œ€๋‹จํžˆ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค(๋”ฐ๋ผ์„œ Task). ๋˜ํ•œ ์š”์ฒญ์ด ๋’ค๋กœ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋œ ์›์ธ์„ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ํŽธ๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

enum ReverseNavigationSourceType {
    Unspecified,
    HwButton,
    Navbar,
    Gesture
}

class ReverseNavigationEventArgs {
    public ReverseNavigationSourceType SourceType { get; }
    public object Source { get; }
}

class Page {
    public virtual Task<bool> OnNavigatingBack(ReverseNavigationEventArgs args) {
        return Task.FromResult(true);
    }
}

๋‚ด๊ฐ€ ๋ณผ ์ˆ˜์žˆ๋Š” ๋‘ ๋ฒˆ์งธ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์€ ์ด๊ฒƒ์„ INavigation ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ผ๋ถ€๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŽธ์ง‘: API๋ฅผ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

https://github.com/xamarin/Xamarin.Forms/issues/6971#issuecomment -574823028 ๋ฌธ์ œ์—์„œ BackButtonCommand๊ฐ€ ๋…ธ์ถœ๋  ์œ„์น˜๊ฐ€ ์ •ํ™•ํžˆ ์–ด๋””์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๊ณ  NavigationPage์—์„œ๋งŒ ์ œ๊ณต๋ฉ๋‹ˆ๊นŒ? ํฌํ•จํ•˜๋Š” NavigationPage์— ๋‹จ์ผ ๊ตฌํ˜„์ด ์žˆ๊ณ  ํ•ด๋‹น ํƒ์ƒ‰ ์Šคํƒ์— ํ‘ธ์‹œ๋œ ๋ชจ๋“  ํŽ˜์ด์ง€๊ฐ€ ๋™์ผํ•œ ๋™์ž‘์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? (๋‚˜๋Š” ์ด๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.) ๊ฐœ๋ณ„ ํŽ˜์ด์ง€๋Š” ์–ด๋–ป๊ฒŒ ์ž์ฒด ์žฌ์ •์˜๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ๋ช…๋ น์„ ํ™œ์šฉํ•ฉ๋‹ˆ๊นŒ?

์œ„์— ์ œ๊ณต๋œ ์ œ์•ˆ์ด ํŽ˜์ด์ง€๋‹น ์žฌ์ •์˜ํ•ด์•ผ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์˜ ์š”๊ตฌ๋ฅผ ์ถฉ์กฑ์‹œํ‚ฌ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋’ค๋กœ ํƒ์ƒ‰์˜ ํ˜ธ์ถœ์€ ์ข…์ข… ๊ฐœ๋ฐœ์ž๊ฐ€ ๋’ค๋กœ ํƒ์ƒ‰์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ์„ ๋‹จ์ˆœํžˆ ์ œ์–ดํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ๋‹จ์ˆœํžˆ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘์‹ญ์‹œ์˜ค.

๋ชจ๋“  ์‚ฌ๋žŒ์„ ๋Œ€๋ณ€ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ ์†Œํ”„ํŠธ์›จ์–ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์‹คํ–‰๋˜๋Š” ์ผ๋ถ€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ํ”„๋กœ์ ํŠธ์˜ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์œผ๋ฉฐ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœํ•˜๋Š” OnBackButtonPressed ๋„ ์žฌ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ๋’ค๋กœ ํƒ์ƒ‰.

์ด๋Ÿฌํ•œ ์†์„ฑ์€ ๋ชจ๋‘ NavigationPage์— ์—ฐ๊ฒฐ๋œ ์†์„ฑ๊ณผ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Core/NavigationPage.cs#L19

ํ™œ์„ฑ ํŽ˜์ด์ง€์— ์ ์šฉํ•˜๋ฉด NavigationPage๊ฐ€ ๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ์†์„ฑ์€ ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํŽ˜์ด์ง€์—์„œ ์„ค์ •ํ•˜๊ณ  VM์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์Šต๋‹ˆ๋‹ค.

<ContentPage NavigationPage.BackButtonCommand={Bindiing BackCommand}

๋ช…๋ น์ด ๊ธฐ๋ณธ ๋™์ž‘์„ "๋น„ํ™œ์„ฑํ™”"ํ•˜๋Š” ๊ฒƒ์˜ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ๋น„๋™๊ธฐ ํƒ์ƒ‰์„ ํ™œ์„ฑํ™”ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๋ฒ„ํŠผ์€ ๋ช…๋ น์œผ๋กœ ๋ผ์šฐํŒ…๋˜๊ณ  ๋ช…๋ น์€ ์›ํ•˜๋Š” ๊ธฐ๊ฐ„ ๋™์•ˆ ๋ฌด์—‡์ด๋“  ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ํƒ์ƒ‰ API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํƒ์ƒ‰์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  ๊ฒƒ์„ ๋น„๋™๊ธฐ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ "๋น„๋™๊ธฐ"๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋’ค๋กœ ์Šค์™€์ดํ”„ํ•˜๊ฑฐ๋‚˜ ๋ชจ๋‹ฌ์—์„œ ํ•ด์ œํ•˜๊ธฐ ์œ„ํ•ด ์Šค์™€์ดํ”„ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค ๋•Œ๋ฌธ์— ํฅ๋ฏธ๋กญ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ฌ๊ธฐ์„œ ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ด๋Ÿฌํ•œ ์ œ์Šค์ฒ˜๋ฅผ ํƒญํ•˜๊ณ  ๋ช…๋ น์œผ๋กœ ๋ผ์šฐํŒ…ํ•˜๊ณ  ์ทจ์†Œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชธ์ง“.

๋˜ํ•œ ๊ณ„์ธต์  ํ”„๋ก์‹œ๋ฅผ ๋๊นŒ์ง€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” Navigation ํด๋ž˜์Šค์˜ ์ด๋ฒคํŠธ๋กœ ๋งŒ๋“  ๋‹ค์Œ ์ด๋ฒคํŠธ์™€ ํ•จ๊ป˜ EventToCommand ๋™์ž‘์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ NavigatingBack์ด ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ด์™€ ๊ฐ™์€ ๊ฒƒ์„ ๊ฐ–๊ฒŒ ๋œ๋‹ค๋ฉด ์‰˜๊ณผ ์œ ์‚ฌํ•œ ํƒ์ƒ‰ ์ด๋ฒคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ์•ฝ๊ฐ„ ํ˜ผ๋ž€ ์Šค๋Ÿฝ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :-) ๊ทธ๋Ÿฌ๋‚˜ ๋‹จ์ง€ ๋ช‡ ๊ฐ€์ง€ ์งˆ๋ฌธ์— ๋‹ตํ•˜๊ณ  ํ† ๋ก ์„ ์œ„ํ•ด ๋ช‡ ๊ฐ€์ง€ ์•„์ด๋””์–ด๋ฅผ ์–ป๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ™œ์„ฑ ํŽ˜์ด์ง€์— ์ ์šฉํ•˜๋ฉด NavigationPage๊ฐ€ ๋ฐ˜์‘ํ•ฉ๋‹ˆ๋‹ค. ์—ฐ๊ฒฐ๋œ ์†์„ฑ์€ ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํŽ˜์ด์ง€์—์„œ ์„ค์ •ํ•˜๊ณ  VM์— ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ข‹์Šต๋‹ˆ๋‹ค.

<ContentPage NavigationPage.BackButtonCommand={Bindiing BackCommand}

@PureWeen ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ํŽ˜์ด์ง€์—์„œ ์†์„ฑ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  ๊ทธ๋ ‡๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค.

NavigationPage.BackButtonCommand๋Š” ์žฅ์น˜ ๋’ค๋กœ ๋ฒ„ํŠผ๋„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ ์•„๋‹ˆ๋ฉด ์†Œํ”„ํŠธ์›จ์–ด ๋’ค๋กœ ๋ฒ„ํŠผ๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ? ๋’ค๋กœ ํƒ์ƒ‰์„ ํ˜ธ์ถœํ•˜๋Š” ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ NavigationPage.BackButtonCommand ๊ฐ€ ์‚ฌ๋ผ์ง€๊ณ  ๋” ์ผ๋ฐ˜ํ™”๋œ ๊ฒƒ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ์ƒ๊ฐํ•ด ๋ณผ ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ/ํ‘ธ์‹œ์™€ ๊ด€๋ จ๋œ ๊ฒƒ์ด ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ  ๊ธฐ์กด API์™€ ์ผ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ •ํ™•ํžˆ๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ด ๋ผ์ธ์„ ๋”ฐ๋ผ ๋ญ”๊ฐ€

์‚ฌ์šฉ์ž ์š”์ฒญ ํŒํ•‘ ๋ช…๋ น
์‚ฌ์šฉ์ž ์š”์ฒญ ํ‘ธ์‹œ ๋ช…๋ น

๋˜๋Š” PoppingCommand ๋ฐ PushingCommand๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปจํ…์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ธ์ˆ˜์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

C# enum NavigationSourceType { Unspecified, HwButton, Navbar, Gesture, FromCode }

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๋ชจ๋‘ ๋ฐ”์ธ๋”ฉ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์ง€๋งŒ ์•„์ง ๋‚ด๊ฐ€ ์ข‹์•„ํ•˜๋Š” ์•„์ด๋””์–ด๋ฅผ ํด๋ฆญํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ˜„์žฌ ํƒ์ƒ‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํƒ์ƒ‰ ํ•ญ๋ชฉ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
๋”ฐ๋ผ์„œ ๋ช…๋ น์„ ํ†ตํ•ด ์ˆ˜ํ–‰๋œ ๊ฒฝ์šฐ ์ง„ํ–‰ ์ค‘์ธ ์ œ์Šค์ฒ˜์ธ์ง€ ๋˜๋Š” ๊ธฐํƒ€ ๋™์ž‘์ธ์ง€ ํƒ์ƒ‰์— ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ 1๋…„ ๋„˜๊ฒŒ ๊ธฐ๋‹ค๋ ค ์™”์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ 1๋…„ ๋„˜๊ฒŒ ๊ธฐ๋‹ค๋ ค ์™”์Šต๋‹ˆ๋‹ค.

์•ˆ์‹ฌํ•˜๋‹ค. 1๋…„์€ ์•„๋ฌด๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค. iPad์—์„œ MasterDetail์ด ์žˆ๋Š” SplitView๋Š” 4๋…„ ์ „์— ์ž‘๋™ํ•˜์ง€ ์•Š๊ณ  ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๋ณด๊ณ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ Xamarin.Forms๋Š” ์—ฌ์ „ํžˆ Bugzilla๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

@SebastianKruseWago ์ด๋ฏธ ๋‹ค๋ฅธ ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ์˜ˆ์ƒ ๊ธฐ๋Šฅ๊ณผ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์‹œ๋‚˜๋ฆฌ์˜ค์ž…๋‹ˆ๋‹ค. ๊ทธ๋“ค์€ ๋˜ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ํ—ˆ์šฉํ•˜๋Š” "๋ฒ„๊ทธ"๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 1๋…„์€ ์ฒซ๋‚ ๋ถ€ํ„ฐ ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋Š” ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ๋งŽ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@akemper1 SplitView๋„ ์ฒซ๋‚ ๋ถ€ํ„ฐ ์ž‘๋™ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. iPad MasterDetailRenderer์—๋งŒ ์žˆ๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ„๊ทธ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ์ถ”ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ 2.4 ์ •๋„ ์ด์ „์— ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@scriptBoris ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ๋งํฌ์™€ ๊ฐ™์œผ๋ฉฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ํ•œ ์†”๋ฃจ์…˜์ด ๋‹ค๋ฅธ ์†”๋ฃจ์…˜๋ณด๋‹ค ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

https://forums.xamarin.com/discussion/67854/android-menu-and-back-button-not-working

https://theconfuzedsourcecode.wordpress.com/2017/03/12/lets-override-navigation-bar-back-button-click-in-xamarin-forms/

๋ณ„๋„ ํ”„๋กœ์ ํŠธ์˜ ๋งํฌ์—์„œ ๋‘ ๊ฐ€์ง€ ์†”๋ฃจ์…˜์„ ๋ชจ๋‘ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š”, ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค๋งŒ, ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์†Œ์‹์ด ์—†์„๊นŒ์š”? ะž.ะž

์งˆ๋ฌธ์„ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค :)

<ContentPage NavigationPage.HasBackButton="False">

์ด์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด ์Šค๋ ˆ๋“œ์— ์ œ์‹œ๋œ ์†”๋ฃจ์…˜์€ ์ˆ˜์šฉ ๊ฐ€๋Šฅ ์ด์ƒ์ด๋ฉฐ, ์ˆ˜๋…„ ๋™์•ˆ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฒƒ์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Xamarin ํŒ€์˜ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ด ์ƒํƒœ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•  ์ˆ˜ ์žˆ๋‚˜์š”? ์ด๊ฒƒ์€ ์ •๋ง ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ํฐ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์…ธ์—์„œ ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ Prism ๋˜๋Š” MVVMCross ์…ธ์„ ํ™œ์šฉํ•˜๋Š” ๋” ํฐ ๋งŽ์€ ์•ฑ์˜ ๊ฒฝ์šฐ ์™„์ „ํžˆ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์—๊ฒŒ ์ •๋ง ํ•„์š”ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ฐ์‚ฌ ํ•ด์š”

@akemper1์— ์‚ฌ๊ณผํ•˜์ง€๋งŒ ํ˜„์žฌ ํŠน์ • ์—…๋ฐ์ดํŠธ๋Š” ์—†์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ์žŠ์ง€ ์•Š์•˜์ง€๋งŒ ๊ณต์‹ API์—์„œ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์•ฝ๊ฐ„ ์ง€์—ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋œ API๋กœ ์ „ํŒŒ๋˜๋Š” ๋’ค๋กœ ๋ฒ„ํŠผ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๋ณด๋ฅ˜ ์ค‘์ธ ์…ธ PR์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ๊ทธ๋“ค์—๊ฒŒ ํฐ ๋ฌธ์ œ๋ผ๊ณ  ๋งํ•˜๋Š” ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜๋„ ๋ช‡ ๊ฐ€์ง€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‹œ๋„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ๋‹จ์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ๋“ค์ด ์žˆ๋Š” ํŽ˜์ด์ง€์—์„œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์†์‹ค๋œ๋‹ค๋Š” ๊ฒƒ์„ "ํ™•์ธ"ํ•  ๋•Œ๊นŒ์ง€ ์‚ฌ์šฉ์ž๊ฐ€ ๋˜๋Œ์•„๊ฐ€๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ •๋ง ์˜ค๋žœ๋งŒ์ž…๋‹ˆ๋‹ค :(

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰