दिलचस्प पोस्ट
जावा प्रोग्राम के डॉक आइकन को कैसे बदल सकते हैं? सी प्रीप्रोसेसर से एक संदेश को प्रिंट करने का एक पोर्टेबल तरीका है? रिलीज कॉम ऑब्जेक्ट बनाम फाइनलरेलीकॉम ऑब्जेक्ट का उपयोग कब किया जाए? रेल / उदारीकरण मॉड्यूल और एंड्रॉइड टेलीग्राम ऐप -> java.lang.UnsatisfiedLinkError: शून्य के लिए कोई क्रियान्वयन नहीं मिला कस्टम स्विफ्ट क्लास को एनएससीडींग के साथ UserDefaults में सहेज रहा है कैसे MySQL में अंतिम अद्यतन पंक्ति की आईडी प्राप्त करने के लिए? कैसे एक आईओएस से एक MySQL डाटाबेस से कनेक्ट करने के लिए? इकाई ढांचे कच्चे एसक्यूएल क्वेरी एंड्रॉइड साझाप्रेचरेंस सुरक्षा <H: फ़ॉर्म> जोड़ता है java.lang.IllegalStateException के लिए: प्रतिक्रिया के बाद एक सत्र नहीं बनाया जा सकता है एचटीएमएल मोबाइल- छिपाने के लिए नरम कीबोर्ड का इस्तेमाल करना क्या मैं एक फाइल डिस्क्रिप्टर को लिनक्स पर किसी अन्य प्रक्रिया में साझा कर सकता हूं या वे प्रक्रिया के लिए स्थानीय हैं? H.264 स्ट्रीम के लिए अनुक्रम / चित्र पैरामीटर सेट (एस) के लिए संभावित स्थान अवैध JSON वेब टोकन

यूआईपीकर देखें और एक बटन में कार्य पत्र – कैसे?

मेरे आवेदन के लिए कार्रवाई पत्रक में चीजों को शामिल करने की आवश्यकता है

  • UIToolbar
  • UIToolbar पर बटन
  • यूआईपीकर नियंत्रण

मैंने अपनी आवश्यकताओं को समझने के लिए एक चित्र शामिल किया है

वैकल्पिक शब्द

क्या आप कृपया बता सकते हैं कि यह कैसे लागू किया जा सकता है?

Solutions Collecting From Web of "यूआईपीकर देखें और एक बटन में कार्य पत्र – कैसे?"

आईओएस 7 के लिए अद्यतन

UIActionSheet के लिए एप्पल दस्तावेज़ : UIActionSheet is not designed to be subclassed, nor should you add views to its hierarchy

मैं एक ActionSheet की सामग्री को कस्टमाइज़ करने की कोशिश कर रहा हूं, क्योंकि इससे आईओएस 7 में गंभीर अमान्य संदर्भ त्रुटियां हो सकती हैं। मैंने इस समस्या के जरिये कुछ घंटे बिताए हैं और अंत में एक अलग दृष्टिकोण लेने का फैसला किया है। मैंने एक साधारण तालिकादृश्य युक्त एक मॉडेल व्यू नियंत्रक के साथ कार्रवाई पत्र दिखाने के लिए कॉल को बदल दिया।

यह पूरा करने के कई तरीके हैं यहाँ एक तरह से है कि मैंने अभी एक मौजूदा परियोजना में कार्यान्वित किया है। यह अच्छा है क्योंकि मैं इसे 5 या 6 विभिन्न स्क्रीनों के बीच पुन: उपयोग कर सकता हूं जहां मैं सभी उपयोगकर्ताओं को विकल्पों की सूची से चुनना चाहता हूं।

  1. एक नया UITableViewController उपवर्ग बनाएँ, SimpleTableViewController
  2. अपने स्टोरीबोर्ड में एक UITableViewController बनाएं (नेविगेशन नियंत्रक में एम्बेडेड) और अपने कस्टम क्लास को SimpleTableViewController में सेट करें
  3. SimpleTableViewController के लिए नेविगेशन नियंत्रक "SimpleTableVC" का एक स्टोरीबोर्ड आईडी दें
  4. SimpleTableViewController.h में, एक NSArray गुण बनाएँ जो तालिका में डेटा का प्रतिनिधित्व करेगा।
  5. इसके अलावा SimpleTableViewController.h में, एक प्रोटोकॉल SimpleTableViewControllerDelegate एक आवश्यक विधि SimpleTableViewControllerDelegate साथ itemSelectedatRow: और एक कमजोर संपत्ति प्रकार id<SimpleTableViewControllerDelegate> प्रतिनिधि id<SimpleTableViewControllerDelegate> इस तरह से हम चयन को वापस पैरेंट कंट्रोलर को पास करेंगे।
  6. SimpleTableViewController.m में, तालिका दृश्य डेटा स्रोत को कार्यान्वित करें और itemSelectedatRow: कॉल करें, itemSelectedatRow: को itemSelectedatRow: tableView:didSelectRowAtIndexPath: :।

इस दृष्टिकोण में काफी पुन: प्रयोज्य होने के अतिरिक्त लाभ हैं उपयोग करने के लिए, अपने ViewController.h में SimpleTableViewController वर्ग को आयात करें, SimpleTableViewDelegate के अनुरूप है, और itemSelectedAtRow: कार्यान्वित itemSelectedAtRow: विधि। इसके बाद, मॉडल खोलने के लिए बस एक नया SimpleTableViewController इन्स्तांत, टेबल डेटा सेट और प्रतिनिधि, और इसे पेश करें

 UINavigationController *navigationController = (UINavigationController *)[self.storyboard instantiateViewControllerWithIdentifier:@"SimpleTableVC"]; SimpleTableViewController *tableViewController = (SimpleTableViewController *)[[navigationController viewControllers] objectAtIndex:0]; tableViewController.tableData = self.statesArray; tableViewController.navigationItem.title = @"States"; tableViewController.delegate = self; [self presentViewController:navigationController animated:YES completion:nil]; 

मैं एक सरल उदाहरण बना और इसे गिटूब पर पोस्ट किया ।

इसके अलावा कड़ी शीट दिखा रहा है कि सीजीसीटेक्टेक्स्ट अमान्य संदर्भ त्रुटियों का कारण है ।

एक और समाधान:

  • कोई टूलबार नहीं बल्कि एक खंड वाले नियंत्रण (आईकेन्डी)

     UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; [actionSheet setActionSheetStyle:UIActionSheetStyleBlackTranslucent]; CGRect pickerFrame = CGRectMake(0, 40, 0, 0); UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:pickerFrame]; pickerView.showsSelectionIndicator = YES; pickerView.dataSource = self; pickerView.delegate = self; [actionSheet addSubview:pickerView]; [pickerView release]; UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Close"]]; closeButton.momentary = YES; closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f); closeButton.segmentedControlStyle = UISegmentedControlStyleBar; closeButton.tintColor = [UIColor blackColor]; [closeButton addTarget:self action:@selector(dismissActionSheet:) forControlEvents:UIControlEventValueChanged]; [actionSheet addSubview:closeButton]; [closeButton release]; [actionSheet showInView:[[UIApplication sharedApplication] keyWindow]]; [actionSheet setBounds:CGRectMake(0, 0, 320, 485)]; 

यद्यपि यह प्रश्न पुराना है, मैं शीघ्रता से उल्लेख करूँगा कि मैंने एक सुविधा फंक्शन के साथ एक ActionSheetPicker वर्ग को एक साथ फेंक दिया है, ताकि आप एक पंक्ति में यूआईपीकर वीयू के साथ एक ActionSheet पैदा कर सकें। यह उत्तर से लेकर इस प्रश्न पर आधारित कोड पर आधारित है।

संपादित करें: यह अब भी एक DatePicker और DistancePicker के उपयोग का समर्थन करता है।


युपीडी:

इस संस्करण को बहिष्कृत किया गया है: इसके बजाय ActionSheetPicker-3.0 का उपयोग करें

एनीमेशन

हां ! मैं अंत में यह खोजें

प्रश्न की छवि में दी गई कार्रवाई शीट को पॉप अप करने के लिए, अपने बटन क्लिक ईवेंट पर निम्न कोड को लागू करें

 UIActionSheet *aac = [[UIActionSheet alloc] initWithTitle:@"How many?" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; UIDatePicker *theDatePicker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0.0, 44.0, 0.0, 0.0)]; if(IsDateSelected==YES) { theDatePicker.datePickerMode = UIDatePickerModeDate; theDatePicker.maximumDate=[NSDate date]; }else { theDatePicker.datePickerMode = UIDatePickerModeTime; } self.dtpicker = theDatePicker; [theDatePicker release]; [dtpicker addTarget:self action:@selector(dateChanged) forControlEvents:UIControlEventValueChanged]; pickerDateToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)]; pickerDateToolbar.barStyle = UIBarStyleBlackOpaque; [pickerDateToolbar sizeToFit]; NSMutableArray *barItems = [[NSMutableArray alloc] init]; UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; [barItems addObject:flexSpace]; UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(DatePickerDoneClick)]; [barItems addObject:doneBtn]; [pickerDateToolbar setItems:barItems animated:YES]; [aac addSubview:pickerDateToolbar]; [aac addSubview:dtpicker]; [aac showInView:self.view]; [aac setBounds:CGRectMake(0,0,320, 464)]; 

इस सवाल का मार्सियो का उत्कृष्ट समाधान किसी भी प्रकार के यूयूएएशन शीट के सबव्यूज़ को जोड़ने में मेरे लिए बहुत मददगार था।

उन कारणों के लिए जो (अभी तक) मेरे लिए पूरी तरह से स्पष्ट नहीं हैं, UIActionSheet की सीमा को केवल प्रदर्शित करने के बाद ही सेट किया जा सकता है; दोनों सागर और मार्सियो के समाधान सफलतापूर्वक एक सेट बॉल के साथ इसका समाधान करते हैं: CGRectMake (…) इसे दिखाए जाने के बाद कार्यपत्रक को भेजा जा रहा है।

हालांकि, चादर पर प्रदर्शित होने के बाद यूआईएशन शीट की सीमा को सेट करना एक्शनशेट की अपील करता है, जहां यह "चबूतरे" होता है, और उसके बाद केवल अंतिम पिक्सल या उससे अधिक के पन्नों पर ही स्क्रॉल होता है।

जब उपप्रदर्शन जोड़ने के बाद एक UIPickerView का आकार बदलता है, तो मैं एक एनीमेशन ब्लॉक के अंदर ActionSheet को भेजे गए सेटबॉन्स संदेश लपेटने की सलाह देता हूं। इससे एक्शन के प्रवेश द्वार को बनाया जाएगा शीट चिकनी दिखती है।

 UIActionSheet *actionSheet = [[[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil]; // add one or more subviews to the UIActionSheet // this could be a UIPickerView, or UISegmentedControl buttons, or any other // UIView. Here, let's just assume it's already set up and is called // (UIView *)mySubView [actionSheet addSubview:myView]; // show the actionSheet [actionSheet showInView:[UIApplication mainWindow]]; // Size the actionSheet with smooth animation [UIView beginAnimations:nil context:nil]; [actionSheet setBounds:CGRectMake(0, 0, 320, 485)]; [UIView commitAnimations]; 

उन लोगों के लिए जो DatePickerDoneClick फ़ंक्शन को खोजने के लिए बांध रहे हैं … यहां एक्शन शीट को खारिज करने के लिए सरल कोड है जाहिर है एएसी एक आइवर होना चाहिए (जो एक है जो आपके आरोपण .h फ़ाइल में जाता है)

 - (void)DatePickerDoneClick:(id)sender{ [aac dismissWithClickedButtonIndex:0 animated:YES]; } 

मुझे सच में समझ में नहीं आ रहा है कि UIActionSheet अंदर क्यों जा रहा है। ऐसा लगता है कि एक गन्दा और हैमी समाधान है, जिसे भविष्य में आईओएस रिलीज में तोड़ा जा सकता है। (मेरे पास एक एप में इस ब्रेक की तरह चीजें थीं, पहले, जहां यूआईपीकरदृश्य पहली नल पर पेश नहीं किया जा रहा था और उसे दोबारा किया जाना था – यूएएएसीएफ़सेट के साथ अजीब क्विकर्स)।

मैंने जो किया वह केवल एक UIPickerView कार्यान्वित करता है और फिर इसे मेरे विचार के लिए एक सबव्यू के रूप में जोड़ता है, और यह इसे बढ़ाना चेतन करता है जैसे कि यह एक एक्शन शीट की तरह प्रस्तुत किया जा रहा है

 /// Add the PickerView as a private variable @interface EMYourClassName () @property (nonatomic, strong) UIPickerView *picker; @property (nonatomic, strong) UIButton *backgroundTapButton; @end /// /// This is your action which will present the picker view /// - (IBAction)showPickerView:(id)sender { // Uses the default UIPickerView frame. self.picker = [[UIPickerView alloc] initWithFrame:CGRectZero]; // Place the Pickerview off the bottom of the screen, in the middle set the datasource delegate and indicator _picker.center = CGPointMake([[UIScreen mainScreen] bounds].size.width / 2.0, [[UIScreen mainScreen] bounds].size.height + _picker.frame.size.height); _picker.dataSource = self; _picker.delegate = self; _picker.showsSelectionIndicator = YES; // Create the toolbar and place it at -44, so it rests "above" the pickerview. // Borrowed from @Spark, thanks! UIToolbar *pickerDateToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, -44, 320, 44)]; pickerDateToolbar.barStyle = UIBarStyleBlackTranslucent; [pickerDateToolbar sizeToFit]; NSMutableArray *barItems = [[NSMutableArray alloc] init]; UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; [barItems addObject:flexSpace]; // The action can whatever you want, but it should dimiss the picker. UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(backgroundTapped:)]; [barItems addObject:doneBtn]; [pickerDateToolbar setItems:barItems animated:YES]; [_picker addSubview:pickerDateToolbar]; // If you have a UITabBarController, you should add the picker as a subview of it // so it appears to go over the tabbar, not under it. Otherwise you can add it to // self.view [self.tabBarController.view addSubview:_picker]; // Animate it moving up [UIView animateWithDuration:.3 animations:^{ [_picker setCenter:CGPointMake(160, [[UIScreen mainScreen] bounds].size.height - 148)]; //148 seems to put it in place just right. } completion:^(BOOL finished) { // When done, place an invisible button on the view behind the picker, so if the // user "taps to dismiss" the picker, it will go away. Good user experience! self.backgroundTapButton = [UIButton buttonWithType:UIButtonTypeCustom]; _backgroundTapButton.frame = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height); [_backgroundTapButton addTarget:self action:@selector(backgroundTapped:) forControlEvents:UIControlEventTouchUpInside]; [self.view addSubview:_backgroundTapButton]; }]; } // And lastly, the method to hide the picker. You should handle the picker changing // in a method with UIControlEventValueChanged on the pickerview. - (void)backgroundTapped:(id)sender { [UIView animateWithDuration:.3 animations:^{ _picker.center = CGPointMake(160, [[UIScreen mainScreen] bounds].size.height + _picker.frame.size.height); } completion:^(BOOL finished) { [_picker removeFromSuperview]; self.picker = nil; [self.backgroundTapButton removeFromSuperview]; self.backgroundTapButton = nil; }]; } 

dismissActionSheet: के अद्भुत समाधान जोड़ने के लिए, dismissActionSheet: इस प्रकार लागू किया जा सकता है।

  1. अपने .h फाइल में एक ActionSheet ऑब्जेक्ट जोड़ें, इसे संश्लेषित करें और इसे अपने .m फ़ाइल में संदर्भ दें।
  2. इस विधि को अपने कोड में जोड़ें

     - (void)dismissActionSheet:(id)sender{ [_actionSheet dismissWithClickedButtonIndex:0 animated:YES]; [_myButton setTitle:@"new title"]; //set to selected text if wanted } 

मुझे लगता है कि यह ऐसा करने का सबसे अच्छा तरीका है

ActionSheetPicker-3.0

यह सब बहुत कुछ इसके सुझाव देते हैं, लेकिन ब्लॉकों का उपयोग करता है, जो एक अच्छा स्पर्श है!

आईओएस 8 के बाद से, आप ऐसा नहीं कर सकते हैं क्योंकि यह काम नहीं करता है क्योंकि एप्पल ने UIActionSheet का आंतरिक कार्यान्वयन किया था। कृपया एप्पल दस्तावेज़ देखें:

उप-वर्गीकरण नोट्स

UIActionSheet subclassed डिजाइन नहीं किया गया है, और न ही आप इसके पदानुक्रम में विचार जोड़ना चाहिए अगर आपको UIAceptionSheet API द्वारा उपलब्ध कराए जाने की तुलना में अधिक अनुकूलन के साथ एक शीट पेश करने की आवश्यकता है, तो आप अपना स्वयं बना सकते हैं और वर्तमान ViewController के साथ इसे विनम्र रूप से प्रस्तुत कर सकते हैं: एनिमेटेड: पूर्णता:।

मुझे वायफायर और फ्लेक्सिडिक्टेड द्वारा लिया गया दृष्टिकोण पसंद आया, लेकिन पाया गया (जैसे एस्ट्रल) कि यह पृष्ठभूमि के रूप में काम नहीं करता था। टैपबटन केवल एकमात्र तत्व था जो उपयोगकर्ता इंटरैक्शन का जवाब दे रहा था। इससे मुझे अपने सभी तीन उप-दृश्यों को डालने के लिए प्रेरित किया: _ पिकर, _ पिक्चर टूलबार और पृष्ठभूमिटैबबटन जिसमें एक दृश्य (पॉपअप) है जो स्क्रीन पर एनिमेटेड और बंद हुआ था। मुझे _pickerToolbar पर एक रद्द करें बटन की भी आवश्यकता है यहां पॉपअप दृश्य के लिए प्रासंगिक कोड तत्व हैं (आपको अपने स्वयं के पिकर डेटा स्रोत और प्रतिनिधि तरीकों की आपूर्ति की आवश्यकता है)।

 #define DURATION 0.4 #define PICKERHEIGHT 162.0 #define TOOLBARHEIGHT 44.0 @interface ViewController () @property (nonatomic, strong) UIView *popup; @property (nonatomic, strong) UIPickerView *picker; @property (nonatomic, strong) UIToolbar *pickerToolbar; @property (nonatomic, strong) UIButton *backgroundTapButton; @end -(void)viewDidLoad { // These are ivars for convenience rect = self.view.bounds; topNavHeight = self.navigationController.navigationBar.frame.size.height; bottomNavHeight = self.navigationController.toolbar.frame.size.height; navHeights = topNavHeight + bottomNavHeight; } -(void)showPickerView:(id)sender { [self createPicker]; [self createToolbar]; // create view container _popup = [[UIView alloc] initWithFrame:CGRectMake(0.0, topNavHeight, rect.size.width, rect.size.height - navHeights)]; // Initially put the centre off the bottom of the screen _popup.center = CGPointMake(rect.size.width / 2.0, rect.size.height + _popup.frame.size.height / 2.0); [_popup addSubview:_picker]; [_popup insertSubview:_pickerToolbar aboveSubview:_picker]; // Animate it moving up // This seems to work though I am not sure why I need to take off the topNavHeight CGFloat vertCentre = (_popup.frame.size.height - topNavHeight) / 2.0; [UIView animateWithDuration:DURATION animations:^{ // move it to a new point in the middle of the screen [_popup setCenter:CGPointMake(rect.size.width / 2.0, vertCentre)]; } completion:^(BOOL finished) { // When done, place an invisible 'button' on the view behind the picker, // so if the user "taps to dismiss" the picker, it will go away self.backgroundTapButton = [UIButton buttonWithType:UIButtonTypeCustom]; _backgroundTapButton.frame = CGRectMake(0, 0, _popup.frame.size.width, _popup.frame.size.height); [_backgroundTapButton addTarget:self action:@selector(doneAction:) forControlEvents:UIControlEventTouchUpInside]; [_popup insertSubview:_backgroundTapButton belowSubview:_picker]; [self.view addSubview:_popup]; }]; } -(void)createPicker { // To use the default UIPickerView frame of 216px set frame to CGRectZero, but we want the 162px height one CGFloat pickerStartY = rect.size.height - navHeights - PICKERHEIGHT; self.picker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, pickerStartY, rect.size.width, PICKERHEIGHT)]; _picker.dataSource = self; _picker.delegate = self; _picker.showsSelectionIndicator = YES; // Otherwise you can see the view underneath the picker _picker.backgroundColor = [UIColor whiteColor]; _picker.alpha = 1.0f; } -(void)createToolbar { CGFloat toolbarStartY = rect.size.height - navHeights - PICKERHEIGHT - TOOLBARHEIGHT; _pickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, toolbarStartY, rect.size.width, TOOLBARHEIGHT)]; [_pickerToolbar sizeToFit]; NSMutableArray *barItems = [[NSMutableArray alloc] init]; UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelAction:)]; [barItems addObject:cancelButton]; // Flexible space to make the done button go on the right UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil]; [barItems addObject:flexSpace]; // The done button UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneAction:)]; [barItems addObject:doneButton]; [_pickerToolbar setItems:barItems animated:YES]; } // The method to process the picker, if we have hit done button - (void)doneAction:(id)sender { [UIView animateWithDuration:DURATION animations:^{ _popup.center = CGPointMake(rect.size.width / 2.0, rect.size.height + _popup.frame.size.height / 2.0); } completion:^(BOOL finished) { [self destroyPopup]; }]; // Do something to process the returned value from your picker } // The method to process the picker, if we have hit cancel button - (void)cancelAction:(id)sender { [UIView animateWithDuration:DURATION animations:^{ _popup.center = CGPointMake(rect.size.width / 2.0, rect.size.height + _popup.frame.size.height / 2.0); } completion:^(BOOL finished) { [self destroyPopup]; }]; } -(void)destroyPopup { [_picker removeFromSuperview]; self.picker = nil; [_pickerToolbar removeFromSuperview]; self.pickerToolbar = nil; [self.backgroundTapButton removeFromSuperview]; self.backgroundTapButton = nil; [_popup removeFromSuperview]; self.popup = nil; }