বর্ণ তালিকাভুক্ত নয়, অ্যারেতে পাস করে 'ইউআইএইচশনশিট' অন্যান্য বাটনস 'তৈরি করুন


110

আমার কাছে স্ট্রিংগুলির একটি অ্যারে রয়েছে যা আমি একটি ইউআইএএকশনশিটে বোতামের শিরোনামগুলির জন্য ব্যবহার করতে চাই। দুর্ভাগ্যক্রমে, অন্যান্য বাটন টিটলস: পদ্ধতিতে অনুরোধে আর্গুমেন্টটি একটি অ্যারে নয়, স্ট্রিংগুলির পরিবর্তনশীল দৈর্ঘ্যের তালিকা গ্রহণ করে।

তাহলে আমি কীভাবে এই শিরোনামগুলি ইউআইএક્શનশীটে পাস করতে পারি? আমি যে ওয়ার্কআরউন্ডটি দেখেছি তা হ'ল অন্য বাটন টিটলগুলিতে শূন্য করা:, তারপরে অ্যাডবটনউইথটাইল: ব্যবহার করে স্বতন্ত্রভাবে বোতামের শিরোনামগুলি নির্দিষ্ট করুন: তবে এতে "বাতিল" বোতামটি শেষের চেয়ে ইউআইএક્શનশীটে প্রথম অবস্থানে নিয়ে যাওয়ার সমস্যা রয়েছে; আমি এটি শেষ হতে চান।

1) উপায় আছে কি স্ট্রিংগুলির পরিবর্তনশীল তালিকার পরিবর্তে একটি অ্যারে পাস করুন, বা বিকল্পভাবে 2) বাতিল বোতামটি ইউআইএક્શનশীটের নীচে সরানো হবে?

ধন্যবাদ।


এটি কাজ করবে কিনা তা নিশ্চিত নয় তবে ইউআইএક્શનশীটের বাতিলবাটনআইডেক্স সম্পত্তিটি কেবল পঠনযোগ্য নয়। এটি সেট করার চেষ্টা করুন এবং দেখুন কি এটি বোতামগুলির ক্রম পরিবর্তন করে?
হারানোইনট্রান্সিট

উত্তর:


248

আমি এটি কাজ করতে পেরেছি (আপনার কেবল দরকার, একটি নিয়মিত বোতামের সাথে ঠিক আছে, এবং এটির পরে এটি যুক্ত করুন:

NSArray *array = @[@"1st Button",@"2nd Button",@"3rd Button",@"4th Button"];

    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here"
                                                             delegate:self
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];

    // ObjC Fast Enumeration
    for (NSString *title in array) {
        [actionSheet addButtonWithTitle:title];
    }

    actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];

    [actionSheet showInView:self.view];

19
এইটা কাজ করে; ধন্যবাদ। বাতিলবাটন ইন্ডেক্স সম্পত্তি সেট করা যেতে পারে তা বুঝতে পারেনি। আমি মনে করি একটি জিনিস যা আমরা সকলেই সম্মত করতে পারি: অ্যাপলের এপিআই এটি স্যুপ করে।
গ্রেগ ম্যালেটিক

11
আমিও একমত! এবং তাদের ডকুমেন্টেশনের 99,99 %ও সফল হয়। এটি সেই ভাষা না জেনে প্রত্নতাত্ত্বিক হিব্রুতে লেখা একটি বই থেকে মস্তিষ্কের অস্ত্রোপচার শেখার চেষ্টা করার মতো।
হাঁসের

4
আমি খুব ইচ্ছুক আমি আরও অনেক বার এই ভোট দিতে পারে। উত্তর ক্র্যাকিং এবং আমি বিশ্বাস করতে পারছি না আমি দীর্ঘকাল যাচ্ছি এই সম্পর্কে না জেনে!
ম্যাটজগ্লোলোয়

1
@ জিমথিও cancelButtonলাল নয়। destructiveButtonপোকামাকড়।
আরমিন

1
দুঃখের বিষয়, এই সমাধানটি ইউআইএક્શનশীটের একটি বাগ দ্বারা ভুগছে যা [UIActionSheet addButtonWithTitle]সঠিকভাবে সেট করা হয়নি বলে মনে হচ্ছে firstOtherButtonIndex(যা প্রতিনিধিদের মধ্যে actionSheet:clickedButtonAtIndex:হার্ডকোডিং 0 বা অনুরূপ স্টাফের পরিবর্তে ব্যবহার করা উচিত )। এটিকে রূপান্তর NSArrayকরার সাথে দুষ্টু হওয়া va_listকোনও দুর্দান্ত সমাধানের মতো শোনাচ্ছে না। :-( এই এপিআই এতটাই কুৎসিত
ড্যানিয়েল রিন্সার

78

একটি সামান্য দ্রষ্টব্য: [অ্যাকশনশিট অ্যাডবটনউইথটাইল:] সেই বোতামটির সূচকটি ফেরত দেয়, তাই নিরাপদ এবং "পরিষ্কার" হয়ে আপনি এটি করতে পারেন:

actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];

এটি কি বাতিল বোতামটি লাল করবে?
user4951

1
@JimThio না, লাল বোতাম "destructiveButton" বলা হয় এবং সেখানে একটি নিজ নিজ সম্পত্তি আছে destructiveButtonIndexতার জন্য
নিক

3

জবা এবং নিকের উত্তরগুলি গ্রহণ করা এবং সেগুলি আরও কিছুটা প্রসারিত করা। এই সমাধানে একটি ধ্বংসের বোতাম যুক্ত করার জন্য:

// Create action sheet
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:title
                                                         delegate:self
                                                cancelButtonTitle:nil
                                           destructiveButtonTitle:nil
                                                otherButtonTitles:nil];
// Action Buttons
for (NSString *actionName in actionNames){
    [actionSheet addButtonWithTitle: actionName];
}

// Destruction Button
if (destructiveName.length > 0){
    [actionSheet setDestructiveButtonIndex:[actionSheet addButtonWithTitle: destructiveName]];
}

// Cancel Button
[actionSheet setCancelButtonIndex: [actionSheet addButtonWithTitle:@"Cancel"]];

// Present Action Sheet
[actionSheet showInView: self.view];

1

প্রতিক্রিয়াটির জন্য দ্রুততম সংস্করণ রয়েছে:

//array with button titles
private var values = ["Value 1", "Value 2", "Value 3"]

//create action sheet
let actionSheet = UIActionSheet(title: nil, delegate: self, cancelButtonTitle: nil, destructiveButtonTitle: nil)
//for each value in array
for value in values{
    //add a button
    actionSheet.addButtonWithTitle(value as String)
}
//display action sheet
actionSheet.showInView(self.view)

মান নির্বাচন করার জন্য, আপনার ভিউকন্ট্রোলারে প্রতিনিধি যুক্ত করুন:

class MyViewController: UIViewController, UIActionSheetDelegate

এবং "ক্লিক করা বাটনআউট ইন্ডেক্স" পদ্ধতিটি প্রয়োগ করুন

func actionSheet(actionSheet: UIActionSheet, clickedButtonAtIndex buttonIndex: Int) {
    let selectedValue : String = values[buttonIndex]
}

ভবিষ্যতে ব্যবহারকারীদের জন্য ... এটা কাজ ... কিন্তু এটা অবচিত ... ব্যবহার stackoverflow.com/a/41322537/884674
jeet.chanchawat
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.