ইউআইএક્શનশীট বাতিল বোতামটি অদ্ভুত আচরণ


116

ব্যবহারকারীদের কী করা উচিত তার বিষয়ে অফার দেওয়ার জন্য আমার কাছে একটি ইউআইবারবার বাটন আইটেম রয়েছে action "বাতিল" বোতামটিতে ক্লিক করার চেষ্টা না করে সবকিছু প্রত্যাশা অনুযায়ী কাজ করে। বোতামটির লক্ষ্যটি যেখানে হওয়া উচিত সেখান থেকে সরে গেছে appears আমি কেবল "বাতিল" এবং "ঠিক আছে" বোতামগুলির মাঝখানে কোথাও ক্লিক করে এটি সক্রিয় করতে পারি।

আমি অন্যান্য অ্যাপ্লিকেশনগুলিতে অ্যাকশনশিটে চেষ্টা করেছি এবং তারা ভাল কাজ করে, তাই এটি কেবল আমার বড় থাম্ব নয়। অ্যাকশন শীটটি একটি ইউআইভিউউকন্ট্রোলারে খোলা হচ্ছে

- (void)showOpenOptions
{
    UIActionSheet *sheet = [[UIActionSheet alloc] 
    initWithTitle:NSLocalizedString(@"Open link in external application?", @"Open in external application")
    delegate:self
    cancelButtonTitle:NSLocalizedString(@"Cancel", @"Cancel")
    destructiveButtonTitle:NSLocalizedString(@"Open Link", @"Open Link")
    otherButtonTitles:nil];

    [sheet showInView:self.view];
    [sheet release];
}

5
কোনও সম্পর্কযুক্ত নোটে, আমাকে ডাব্লুডাব্লুডিসিতে একটি অ্যাপল ইউআই পর্যালোচনা অধিবেশন চলাকালীন বলা হয়েছিল যে অ্যাকশনশীটগুলিতে লাল বোতামটি সত্যই 'ধ্বংসাত্মক' ক্রিয়াকলাপের জন্য করা (যেমন 'মুছুন')।
রামিন

হ্যাঁ, আমি সম্প্রতি হিউম্যান ইন্টারফেসের গাইডলাইন পড়েছি এবং দেখেছি। এটি লাল থেকে ধূসরতে পরিবর্তন করেছে।
নেভান রাজা

উত্তর:


190

ক্রিয়াকলাপে বর্তমান দৃশ্য নিয়ামকের দর্শনটি পরিবর্তনের পরিবর্তে, এর showFromTabBar:পদ্ধতিটি ব্যবহার করুন UIActionSheet

সঠিক উপায়
এটি সঠিকভাবে প্রয়োগযোগ্য ক্ষেত্রটি দেবে:

[actionSheet showFromTabBar:self.tabBarController.tabBar];

ভুল উপায়
এটি টেপযোগ্য অঞ্চলটিকে ভুল জায়গায় ফেলে দেবে (যদি আপনি কোনও ট্যাব বার বা সরঞ্জামদণ্ড ব্যবহার করছেন):

[actionSheet showInView:self.view];

আপনি যদি কোনও সরঞ্জামদণ্ড ব্যবহার করছেন তবে showFromToolbar:পরিবর্তে পদ্ধতিটি ব্যবহার করুন। আপনার সরঞ্জামদণ্ডের একটি রেফারেন্স প্রয়োজন হবে, সম্ভবত একটি আইভার

[actionSheet showFromToolbar:self.myToolbar];

আমার পুরানো উত্তরটিও কাজ করে তবে হ্যাকি:

সবেমাত্র একটি সম্ভাব্য উত্তর পাওয়া গেছে:

01-ডিসেম্বর -2008 10:22 পিএম টম স্যাক্সটন: আমি এই বাগের দিকে আরও কিছু তাকালাম এবং এটি ট্যাববারের সাথে একটি সমস্যা বলে মনে হচ্ছে।

আপনি যদি কোনও ইউআইটিবভিউ কনট্রোলারের সন্তানের মতো একটি ভিউ কন্ট্রোলার থেকে ইউআইএএকশনশিটের [শিট শোআইএনভিউ: সেলফ ভিউ] কল করেন তবে ট্যাববারের দৃশ্যের উপরে থাকা ইউআইএএকশনশিটের সেই অংশে বাতিল বোতামটির হিট পরীক্ষা ব্যর্থ হবে।

আপনি যদি পরিবর্তে ইউআইটিববারকন্ট্রোলারের দৃষ্টিতে পাস করেন তবে ইউআইএএকশনশিট প্রত্যাশার মতো কাজ করে।

দ্রষ্টব্য: আইফোন ওএস ২.১ এবং এর আগে, ইউআইএএকশনশিটটি আপনি যখন শিশু ভিউটি পাস করেন তখন ট্যাব বারের উপরের অংশ থেকে উঠে আসে, তবে ২.২-এ, এটি ট্যাব বারের নীচ থেকে উঠে আসে এবং এইভাবে ট্যাব দৃশ্যের অন্তর্ভুক্ত হয়।

http://openradar.appspot.com/6410780

সম্পাদনা করুন: আমি যখন ভিউটি ট্যাব বারের দর্শন হিসাবে পরিবর্তন করি তখন এটি সঠিকভাবে কাজ করে

[sheet showInView:self.parentViewController.tabBarController.view];

এটি কাজ করে কারণ এটি কাজ করে। এটি অন্যান্য উত্তরের চেয়ে কেন ভাল?
বেন্টফোর্ড 26'09

1
কেন পিতামাতাভিউ নিয়ন্ত্রণকারী? এমনকি ভিউটি কোনও নেভিগেশনভিউতে থাকলেও বার বার নিয়ন্ত্রণকারীকে সঠিক জায়গায় নির্দেশ করা উচিত। যে কোনও ক্ষেত্রে প্যারেন্টভিউ কনট্রোলার ছাড়া আমার পক্ষে কাজ করে।
নাথান

11
আর একটি উত্তর সম্ভাব্য ভাল বলে মনে হচ্ছে। [অ্যাকশনশিট শোআইনভিউ: [স্ব-দর্শন উইন্ডো]] সন্ধান করুন। আরও সোজা এগিয়ে এবং আরও জেনেরিক বলে মনে হচ্ছে।
কেভিন

এই উত্তর পোস্ট করার জন্য আপনাকে অনেক ধন্যবাদ।
ফুলভিও

1
আমার অ্যাপটিতে আমার ট্যাব বার নেই, তবে এখনও এই জাতীয় সমস্যা রয়েছে। আমি এটি [[সার্ফ.ভিউ উইন্ডো]] দিয়ে সমাধান করেছি। এটি যাইহোক ট্যাব বার সমস্যা নয়।
মাইক কেসকিনভ

37

আমি এ একটি উত্তর পাওয়া এখানে যে কাজ করে।

ব্যবহার করছে: [filterActionSheet showInView:[self.view window]];

আমি আমার ট্যাব বারটিতে যাওয়ার জন্য কয়েকটি উপায় চেষ্টা করেছি এবং তারা এই অ্যাপ্লিকেশনটি সেট আপ করার সাথে সাথে এটি বিশৃঙ্খল বলে মনে হচ্ছে ...


পারফেক্ট! ধন্যবাদ। এটি আমার জন্য সঠিক সমাধান, কারণ আমি এই সমস্যাটি এমন একটি ইউআইটিএবলভিউ কনট্রোলারের সাথে নিয়ে যাচ্ছিলাম যে এখানে অন্যদের মতো একটি ট্যাববার নয় এমন একটি সরঞ্জামদণ্ড ছিল ।
উইলিয়াম ডেনিস

ভাল জিনিস, এটি আমার জন্য কাজ করেছে! এটি অবশ্যই এটি করার সহজতম উপায়!
cgossain

2
এটি আরেকটি সমস্যা সৃষ্টি করে। ল্যান্ডস্কেপ ডিভাইস (সেইসাথে অন্যান্য সমস্ত সামগ্রী হিসাবে) অ্যাকশনশিট প্রতিকৃতি নির্দেশে উপস্থিত হয় appears
মাইক কেসকিনভ

22

পরিবর্তে ব্যবহার করুন:

[sheet showFromTabBar:theTabBar];

1
আমি থেকে এই সংশোধন showInTabBar:করার showFromTabBar:। এছাড়াও মনে রাখবেন যে স্ক্রিনের নীচে আপনার কী স্ক্রিন আসবাব রয়েছে তার উপর নির্ভর করে একটি 'শোফ্রমটুলবার: `পদ্ধতি রয়েছে। আমি মনে করি এটি গৃহীত উত্তরের চেয়ে উত্তম উত্তর।
স্টিফেন ডার্লিংটন

স্টিফেন, কৌতূহল আপনি কেন মনে করেন এটি শোভিউ নির্দিষ্ট করে তুলনায় ভাল: ট্যাববার? সংযোগের দৃষ্টিকোণ থেকে আমি ভেবেছিলাম যে শোআইনভিউ সম্ভবত আরও আদর্শ হবে, পরে যদি ট্যাববারটি বাদ পড়ে যায় তবে সম্ভবত একটি সরঞ্জামদণ্ড দিয়ে প্রতিস্থাপন করা হয়েছে। আমি মনে করি নির্দিষ্ট সাব ভিউ কন্ট্রোলারের আসলেই জানা বা যত্ন নেওয়া উচিত নয়।
বিলি গ্রে

যদি ট্যাব বারটি পরে বাদ দেওয়া হয়, আপনাকে নির্বিশেষে কোডের সেই লাইনটি সম্পাদন করতে হবে (যদি না সম্ভবত থ্যাববারটি একটি দৃশ্যের খারাপ নামযুক্ত রেফারেন্স না হয়ে যায় যা)। সুতরাং আমি দেখতে পাই না এই পদ্ধতিটি কীভাবে শো-ভিউ: দ্য ট্যাববারের চেয়ে আরও বেশি মিলিত। আমি শোফ্রমটাববার ব্যবহার করি: পাশাপাশি এটি আমার কাছে নিরাপদ বলে মনে হয়। কভারগুলির আওতায় কী চলছে তা আমি জানি না, তবে আমি কল্পনা করে দেখি যে শোফ্রমটাববার: ট্যাব বারের দৃশ্যের সাথে শোফ্রমভিউয়ের তুলনায় ভবিষ্যতে ওএস রিলিজগুলিতে ভাঙ্গার সম্ভাবনা কম।
ক্রিস্টোফার পিক্সলে

10

এখানে ঠিক আছে this

[actionsheet showInView:[UIApplication sharedApplication].keyWindow];

5

আমি মনে করি যে উত্তরগুলির তিনটির সংমিশ্রণ হ'ল এটি পরিচালনা করার সঠিক উপায়:

    [actionSheet showFromTabBar:self.tabBarController.tabBar];

উদাহরণস্বরূপ, শোফ্রমটাববার ব্যবহার করুন (এ কারণেই এটি বিদ্যমান) এবং নাথান যেভাবে নির্দেশ করেছেন সে হিসাবে আপনার প্যারেন্ট ভিউকন্ট্রোলারের দরকার নেই (আসলে, স্ব.পিয়েন্টভিউ কন্ট্রোলআর.ট্যাববারকন্ট্রোলআরটিববার আমার জন্য শূন্য করে না।


অবশ্যই এটি শূন্য করে, কারণ প্যারেন্ট ভিউ কন্ট্রোলার (যা ইউআইটিববারভিউ কনট্রোলার) নিজেই অন্য ইউআইটিববারকন্ট্রোলারের মধ্যে নেস্টেড থাকে না, তাই এর ট্যাববারকন্ট্রোলার-সম্পত্তিটি শূন্য।
ডোমিনিক সিবোল্ড

1

এফওয়াইআই - ট্যাববারে UIDocamentInterationController এর অ্যাকশনশিট পদক্ষেপ নিয়ে একই সমস্যা ছিল। ঠিক করতে নিম্নলিখিত ব্যবহার করুন।

UIViewController *parentView = [[self parentViewController] parentViewController];
[docController presentOptionsMenuFromRect: rect inView: parentView.view animated:YES];

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.