[UICollectionViewCell imageCell]: unrecognized selector sent to instance - ios6

I read ALL questions with this tittle. FavoritosViewController.m I have:
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
favcolCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:#"fav" forIndexPath:indexPath];
[[cell imageCell]setImage:[UIImage imageNamed:[arrayimages objectAtIndex:indexPath.item]]];
return cell;
}
on favcolCell.h I have:
#property (retain, nonatomic) IBOutlet UIImageView *imageCell;
on favcolCell.m I have:
#synthesize imageCell;
(...)
- (void)dealloc {
[imageCell release];
[super dealloc];
}
What I'm missing?
EDIT:
Solution: Do the right class registration.

I missed this:
[self.collectionView registerClass:[FavoritosRestViewCell class] forCellWithReuseIdentifier:#"fav"];
on the ViewDidLoad Method. I registered the wrong class. Thanks to user HotLicks.

For me this is the solutions..
I have taken one collection view and imageView inside cell. But I forgot to set tag in the interface(storyboard) file.
Storyboard-> collection view->image view->property inspector->set tag here.
I hope it helps someone.

Related

Restoring first responder after dismissing popoverview

I have a text view on the main view controller. I have a bar button item on the view controller's navigation bar. When the app starts, I perform the following actions:
Tap the text view to begin editing and to show the keyboard.
Tap the bar button to show a popover view.
Without dismissing the popover view, I dismiss the keyboard.
Dismiss the popover view by tapping any other view on the screen.
Before iOS 11, the keyboard will NOT show up again after Step 4. However, in iOS 11, it will show up. It seems that in iOS 11, it restores the first responder after dismissing the popover view.
Here are my questions:
Is it a bug, or some changes in iOS 11?
If it is new, then how can I prevent the keyboard from showing after dismissing the popover view?
Also see the following videos:
For iOS 11:
https://www.dropbox.com/s/88wyv0y0idsmu5c/iOS%2011.mov?dl=0
For iOS 10.3:
https://www.dropbox.com/s/11gg6h39mcgb0fs/iOS%2010.3.mov?dl=0
Here are some codes:
#import "MainViewController.h"
#interface MainViewController ()
#property(nonatomic, retain)UITextView *textView;
#end
#implementation MainViewController
#synthesize textView = _textView;
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor orangeColor];
self.textView = [[UITextView alloc] init];
self.textView.translatesAutoresizingMaskIntoConstraints = NO;
[self.view addSubview:self.textView];
self.textView.backgroundColor = [UIColor blueColor];
NSDictionary *dict = #{#"textView" : self.textView};
NSArray *vCons = [NSLayoutConstraint constraintsWithVisualFormat:#"V:|-3-[textView]-3-|" options:0 metrics:nil views:dict];
NSArray *hCons = [NSLayoutConstraint constraintsWithVisualFormat:#"H:|-3-[textView]-3-|" options:0 metrics:nil views:dict];
[self.view addConstraints:vCons];
[self.view addConstraints:hCons];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#end
#import "ViewController.h"
#import "MainViewController.h"
#interface ViewController ()
#property(retain,nonatomic)MainViewController *mainVC;
#end
#implementation ViewController
#synthesize mainVC = _mainVC;
- (void)viewDidLoad {
[super viewDidLoad];
self.mainVC = [[MainViewController alloc] init];
UINavigationController *navigCon = [[UINavigationController alloc] initWithRootViewController:self.mainVC];
self.mainVC.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:#"Button" style:UIBarButtonItemStylePlain target:self action:#selector(showPopover)];
[self.view addSubview:navigCon.view];
}
-(void)showPopover {
UIAlertController *alertCon = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *action1 = [UIAlertAction actionWithTitle:#"Action 1" style:UIAlertActionStyleDefault handler:nil];
UIAlertAction *action2 = [UIAlertAction actionWithTitle:#"Action 2" style:UIAlertActionStyleDefault handler:nil];
[alertCon addAction:action1];
[alertCon addAction:action2];
[alertCon setModalPresentationStyle:UIModalPresentationPopover];
UIPopoverPresentationController *popPresenter = [alertCon popoverPresentationController];
popPresenter.barButtonItem = self.mainVC.navigationItem.rightBarButtonItem;
[self presentViewController:alertCon animated:YES completion:nil];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
#end
I just had this issue on iOS 11 with a swift app. Calling [textView resignFirstResponder] any time before dismissing the new controller was the only fix. [view endEditing] was not enough.

Button Action Issue in IOS

This is the code i have used.
In View Controller A:
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(50, 50, 70, 40)];
[button setTitle:#"Next View" forState:UIControlStateNormal];
[button addTarget:self action:#selector(nextView) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
-(void) nextView
{
SecondviewController *secondView = [[SecondviewController alloc] init];
[self.view addSubview:secondView.view];
}
In View Controller B:
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(50, 50, 70, 40)];
[button setTitle:#"Previous View" forState:UIControlStateNormal];
[button addTarget:self action:#selector(previousView) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}
-(void) previousView
{
[self.view removeFromSuperview];
}
Issue: When i click the button in the view controller B, its not switching back to the view controller A...
You are not switching viewControllers, you are taking the view from viewController B and adding it as a subview to viewController A.
Here:
SecondviewController *secondView = [[SecondviewController alloc] init];
[self.view addSubview:secondView.view];
You need to navigate to the new view Controller... Replace it with this for example
SecondviewController *secondViewController = [[SecondviewController alloc] init];
[self presentViewController:secondViewController animated:YES completion:NIL];
(it's best to include 'controller' when naming controllers to avoid confusion with their views)
Then to return, you need to dismiss the presented viewcontroller...
In ViewControllerB replace this:
[self.view removeFromSuperview];
With
[[self presentingViewController] dismissViewControllerAnimated:YES completion:NIL];
This is sending a message back from the presented viewController - viewController B - to the presenting viewController, viewControllerA which does the actual dismissing.
instead of adding a the second subview to the first subview, you need to present or push the view controller in the stack. You are just simply adding it as a subview.
SecondviewController *secondView = [[SecondviewController alloc] init];
[self presentViewController:secondView animated:NO completion:nil];
In the second view controller when you dismiss it you can just simply dismiss/pop it from the stack.
[self dismissViewControllerAnimated:YES];

Unable to change color of UISearchDisplayController

I'm using UISearchDisplayControlleron UInavigationBar but the background color of UISearchDisplayController is not matching the color of uinavigationbar. i used the following code in ma ViewDidLoad but no change I'm unable to change the color of UISearchDisplayController
self.searchDisplayController.searchBar.tintColor = [UIColor clearColor];
A UISearchDisplayController is not an interface element. It is a controller, not a view. It has no color.
What I did was I created a UISearchBar subclass and in IB made the searchBar belonging to the UISearchDisplayController part of that subclass. From there I was able to change the tintColor and backgroundColor. The reason I needed this was because the UISearchBar was not displaying correctly within a UINavigationBar and this was the only way I could think of on, how to do it.
Edit
Your actually able to do this relatively easy with UISearchDisplayController's initializer, initWithSearchBar:contentsController:, however you'll still need to subclass UISearchBar.
Here is the Code I used. Now if your performing this through IB you only need to use initWithCoder: but I created a setup method. Just incase, I need to use it again, in places other than IB.
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
// Initialization code
[self setup];
}
return self;
}
-(id) initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
[self setup];
}
return self;
}
-(id)init {
if (self = [super init]) {
[self setup];
}
return self;
}
-(void) setup {
self.backgroundColor = [UIColor clearColor];
self.tintColor = [UIColor clearColor];
for (UIView * view in self.subviews) {
if ([view isMemberOfClass:NSClassFromString(#"UISearchBarBackground")]) {
view.alpha = 0.0;
}
}
}

Delegate and protocols in ios 6 seem does not work

I have created a simple TableView application using delegate and protocols, it worked in ios 5 but when i updated my xcode, i does not work in ios 6.
The code is like this:
In child view:
#class AddItemViewController;
#class CheckListItem;
#protocol AddItemViewControllerDelegate <NSObject>
- (void)addItemViewControllerDidCancel: (AddItemViewController *)controller;
- (void)addItemViewController:(AddItemViewController *)controller didFnishAddingItem:(CheckListItem *)item;
#end
#interface AddItemViewController : UITableViewController <UITextFieldDelegate>
//declare an property
#property (nonatomic, assign) id <AddItemViewControllerDelegate> delegate;
in childview.m:
- (void)addItemViewControllerDidCancel: (AddItemViewController *)controller{
//i do something here
}
in parentview.h:
#import "AddItemViewController.h"
#interface CheckListViewController : UITableViewController <AddItemViewControllerDelegate>
-(IBAction)addItem;
#end
in parentview.m:
- (void)addItemViewControllerDidCancel:(AddItemViewController *)controller
{
[controller dismissViewControllerAnimated:YES completion:nil];
}
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([segue.identifier isEqualToString:#"AddItem"]){
UINavigationController *navigationController = segue.destinationViewController;
AddItemViewController *controller = (AddItemViewController *)navigationController;
controller.delegate = self;
NSLog(#"perform prepare for segue");
}
}
Is there anything wrong with this code?
Thanks
In your child view you have to call [delegate addItemViewControllerDidCancel: (AddItemViewController *)controller], instead of just calling the method.
If you change that, it should work :)

UITapGestureRecognizer won't trigger in IOS 6

The following code worked fine is IOS 5, but now handleTapGesture doesn't even get called in IOS 6. What changed?
- (id)initWithCoder:(NSCoder *)coder
{
self = [super initWithCoder:coder];
if (self) {
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:#selector(handleTapGesture:)];
[self addGestureRecognizer:tap];
}
return self;
}
- (void)handleTapGesture:(UITapGestureRecognizer *)recognizer
{
MessageNib *cell = self;
MessageView *view = (MessageView *)[[[NSBundle mainBundle] loadNibNamed:#"MessageView" owner:self options:nil] objectAtIndex:0];
view.message = cell.message;
[[NSNotificationCenter defaultCenter] postNotificationName:NEW_SUB_PAGE object:view];
}
I guess you have to set the numberOfTaps after alloc init
tap.numberOfTapsRequired = 1;
Or the other possibility is initWithCoder was not called.
Ended up just putting a "phantom" button (aka button with no content) over my item I wanted tappable and attached a Touch Up Inside event to the button which calls my tap gesture code.
This is a decent momentary hack anyway.

Resources