shopkick application UI widgets - iphone

Please see the link below.
http://itunes.apple.com/app/id383298204?mt=8
There are screen shots of showpick application. In that there is a collect button which is some what impossible to implement under ui tab bar. Can someone help me to figure it out how they have implemented it? Is that an actual UITabBar?
Thank you

I figured out a workaround. I basically add a dummy controller for the middle entry of the UITabBarController. And in viewDidLoad I add a button to the UITabBar like so:
tabBarButton = [[UIButton alloc]initWithFrame:CGRectMake(125, -10, 70, 33)];
[tabBarButton setBackgroundImage:[UIImage imageNamed:#"state-inactive"]forState:tabBarButton];
[topbarButtonScan setBackgroundImage:[UIImage imageNamed:#"state-active"]forState:UIControlEventTouchDown];
[tabBarButton addTarget:self action:#selector(tabBarButtonClicked:) forControlEvents:UIControlEventTouchUpInside];
[[[self tabBarController]tabBar ] addSubview: tabBarButton];

Related

Using InterfaceBuilder ONLY for positioning objects on the view

Have created a UIButton programmatically, all works as expected but how can I use the IB ONLY for positioning the objects on the view?
To be more precise I like to use the IB for this line only (see: setViaIB)
self.searchBtn.frame = CGRectMake(setViaIB, setViaIB, 36, 36);
Full code for UIButton creation:
self.searchBtn = [UIButton buttonWithType:UIButtonTypeCustom];
self.searchBtn.frame = CGRectMake(100, 0, 36, 36);
[self.searchBtn setBackgroundImage:[UIImage imageNamed:#"search.png"] forState:UIControlStateNormal];
[self.searchBtn addTarget:self action:#selector(searchBtnTapped::) forControlEvents:UIControlEventTouchUpInside];
[self.searchBtn setNeedsDisplay];
[self.view addSubview:self.searchBtn];
I'm pretty sure you can't, why don't you use initWithNibName: bundle: to create the whole view in an nib (Interface Builder) file?
You can only position the button in IB if you created it in IB. You can change searchBtnTapped method to an IBAction and link it up to your button via files owner in IB. You can then move the button wherever you want in IB. If not you will just have to reposition the button via coordinates until you are happy.

Is it possible to make the navigationcontroller title a button?

Is it possible to make the navigationcontroller title a button? but without a button look to it. I want it to be just text that if you click on it a view/actionsheet pops up from the bottom
If so, can you show me programmatically how I would make it a button?
Thanks
You can set TitleView of navigationItem to set a button as title.
Here is what i tried and got it working:
UIButton*button=[UIButton buttonWithType:UIButtonTypeRoundedRect];
button.frame=CGRectMake(0, 0, 30, 20);
[button setTitle:#"Testing" forState:UIControlStateNormal];
[button addTarget:self action:#selector(btnAction) forControlEvents:UIControlEventTouchUpInside];
[[self navigationItem] setTitleView:button];
But if you don't want it to look like a button, you have set the buttonWithType to custom and set its backGroundImage property.
in btnAction have your code to show the pop ups.

Where to insert code that creates buttons programmatically?

I receive some JSON from the net and based on that data, I must create 2 or 3 buttons. Part of my gui is static and created in NIB (won't change), only the number of buttons will change. I found this code for making buttons in code:
//create the button
UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
//set the position of the button
button.frame = CGRectMake(100, 170, 100, 30);
//set the button's title
[button setTitle:#"Click Me!" forState:UIControlStateNormal];
Is this the right way? In which method of my viewcontroller should I put this code?
You can add the button whenever you want, as long as the view has been loaded already. The one thing you'd need to add to the above code is
[[self view] addSubview:button];
Using this code, you have a button on the screen, but it won't be able to trigger any actions. You'll probably also want to add:
[button addTarget:self action:#selector(someMethod:) forControlState:UIControlEventTouchUpInside];
You should add the buttons in the delegate/method that parses the JSON data.
Don't forget to add the created buttons to your view:
[containerView addSubview:button];

navigation Controller button left

In my application, i have some leftBarbutton of the navigation bar set to " retour" and some others set to "back" i would like to set all my buttons to "retour", how to do this please ? i have spend many hours to dos this.
thanks
I reckon you want to change the language, rather than the button description itsself.
In oder to change the language have a look into the (appname)-Info.plist.
There is an Attribute: Localization native development region.
Change it accordingly to, i guess in your case France if. am not horribl wrong.
Cheers,
Sebastian
UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];
[btn setTitle:#"retour" forState:UIControlStateNormal];
btn.frame=CGRectMake(3, 2, 53, 30);
UIBarButtonItem *btnBack=[[UIBarButtonItem alloc] initWithCustomView:btn];
self.navigationItem.leftBarButtonItem=btnBack;
[btnBack release];
[btn release];

iPhone : making UIBarButtonItem that is arrow shaped

I have a UIBarButtonItem on a navigation bar. I'd like to make it arrow shaped. By that I mean I want it to be square except for a pointy side. Does anyone know how to do this?
Thanks!
I wrestled with several approaches on this one and finally figured it out using all the answers from several sources. There are a couple of tricks; this snippet will show it all (I was creating a custom rightNavButton, but you can adapt this easily for any UIBarButtonItem):
// Produces a nice "right arrow" style button that mirrors the back arrow
// automatically added by the navController
//
UIImage *buttonImage = [UIImage imageNamed:#"forwardButton.png"];
UIButton *forwardButton = [UIButton buttonWithType:UIButtonTypeCustom];
[forwardButton setBackgroundImage:buttonImage forState:UIControlStateNormal];
[forwardButton setTitle:#"Meter" forState:UIControlStateNormal];
forwardButton.font = [UIFont boldSystemFontOfSize:12];
forwardButton.frame = CGRectMake(0, 0, buttonImage.size.width, buttonImage.size.height);
[forwardButton addTarget:self action:#selector(showMeter)
forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]
initWithCustomView:forwardButton];
Note: it turns out that if you try to set the target and action directly on the button item after assigning a custom view using a UIButton that it won't take - you have to set the target and action on the button itself - apparently the navBar uses the button provided verbatim.
This is the image I was using on the opaque black navBar (you can use anything, obviously): http://raretiger.com/images/forwardbutton.png
Make a custom background. See Creating a left-arrow button (like UINavigationBar's "back" style) on a UIToolbar for how.
You may -pushNavigationItem:animated: to make the built-in back button appear, although you cannot assign custom actions to it.
For undocumented methods, you may use
UIButton* backButton = [UIButton buttonWithType:101];
to create a back "button".
You could create an UIImageView or an UIButton with the required image then use:
[[UIBarButtonItem alloc] initWithCustomView: arrowButton];
Hope this helps.
continuing on #Plamen Dragozov's idea: i noticed if you leave the uibutton as is, it would trigger a picture adjustment when touched and that is quite the opposite what a normal navigation back button does. So what I did was to uncheck "highlighted adjusts Image" and it works like a charm.
hope this helps newbies like me.
More elegant solution:
UIBarButtonItem * backButtonItem = [[UIBarButtonItem alloc] initWithTitle:#"Title" style:UIBarButtonItemStylePlain target:self action:#selector(back:)];
[backButtonItem setBackgroundImage:[UIImage imageNamed:#"back.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
self.navigationItem.leftBarButtonItem = backButtonItem;
My problem was renaming the back button that appears on the pushed view controller. I found a dirty workaround and if you ignore the non-ideal animation problem, you'll get a back button with the title you want.
The trick is to change the title of the first VC in viewWillDisappear and re-set it of course in viewWillAppear
(Needless to say, by default, if there is no leftBarButtonItem set, UINavigationController will show a back button with the title of the VC that pushed the current VC)
In the VC where you push your current VC, do
-(void) viewWillDisappear:(BOOL) animated {
[super viewWillDisappear:animated];
self.title = #"Back";
}
-(void) viewWillAppear:(BOOL) animated {
[super viewWillAppear:animated];
self.title = #"Original Title";
}