代码之家  ›  专栏  ›  技术社区  ›  David Kanarek

UIButton边框和背景图像

  •  5
  • David Kanarek  · 技术社区  · 16 年前

    问题:UIButton类不会向用户提供按钮是否被选中的指示,除非您更改按钮的其他内容。由于图像不随状态变化,我需要每个图像中的两个,一个正常,一个选中,并为按钮的每个状态设置一个。这很烦人。我原以为我会改变背景图像,但这会删除按钮上漂亮的边框,我只得到一个矩形的背景图像,恶心。

    可能的解决方案我不喜欢:

    1) 创建一个与UIButton边框匹配的背景,并将其用于选定对象。我不喜欢这样,因为它们不会完美匹配,而且我很挑剔。

    我希望现在已经有人想出了一个像样的解决办法。提前谢谢。

    4 回复  |  直到 16 年前
        1
  •  5
  •   TechZen    16 年前

    由于UIButton有两个图像层,一个图像层和一个背景图像层,我认为您可以通过为所有按钮使用两个背景图像来实现您想要的功能。一个图像显示边框,另一个不显示边框。当控件状态更改时交换背景。

        2
  •  1
  •   stealthyninja michkra    14 年前
    //
    //  TabBarSingleton.h
    
    #import <Foundation/Foundation.h>
    
    @interface TabBarSingleton : UITabBarController <UITabBarControllerDelegate>{
        NSRecursiveLock *barLock;
    
        UIButton *Button;
        UIButton *favoriteButton;
    }
    
    @property(nonatomic, retain) UIButton *Button;
    @property(nonatomic, retain) UIButton *favoriteButton;
    
    - (void) ButtonPressed;
    - (void) favoriteButtonPressed;
    
    @end
    
    ///////////////////////////////////
    
        3
  •  0
  •   Madhup Singh Yadav    16 年前

    希望这会给你一个公平的想法。

        4
  •  0
  •   Toon Krijthe    13 年前
    //
    //  TabBarSingleton.m
    
    //  Created by ArunDhwaj on 9/7/10.
    //  Copyright 2010 __MyCompanyName__. All rights reserved.
    //
    
    
    #import "TabBarSingleton.h"
    
    @implementation TabBarSingleton
    
    @synthesize Button, favoriteButton;
    
    
    - (id) init
    {
        if (self = [super initWithNibName: nil bundle: nil]) 
        {
            barLock = [[NSRecursiveLock alloc] init];
        }
        self.delegate = self;
        return self;
    }
    
    + (TabBarSingleton *) defaultBar
    {
    }
    
    - (void)viewDidLoad
    {
        NSLog(@"TabBarSingleton: viewDidLoad");
    
        //Hiding TabBar 
        self.tabBar.hidden = YES;
    
        //Creating a UIView, its frame is same as tabBar frme
        CGRect tabbarFrame = self.tabBar.frame; 
        UIView* customTabbarView = [[UIView alloc] initWithFrame:tabbarFrame];
    
        UIImageView *newsFeedImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"newsfeeds_normal.png"]];
        newsFeedImg.frame = CGRectOffset(newsFeedImg.frame, 0, 1);
    
        Button = [UIButton buttonWithType:UIButtonTypeCustom];
        [Button setFrame:newsFeedImg.frame];
    
        [Button setBackgroundImage:newsFeedImg.image forState:UIControlStateNormal];
        [Button setBackgroundImage:[UIImage imageNamed:@"newsfeeds_active.png"] forState:UIControlStateHighlighted];     
        [Button addTarget:self action:@selector(newsFeedsButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    
        [customTabbarView addSubview:Button];
        //[newsFeedImg release];
    
        CGRect newsFeedFrame = newsFeedImg.frame;
        UIImageView *favoriteImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"favorites_normal.png"]];
        favoriteImg.frame = CGRectMake(newsFeedFrame.size.width, newsFeedFrame.origin.y, newsFeedFrame.size.width, newsFeedFrame.size.height);
    
        favoriteButton = [UIButton buttonWithType:UIButtonTypeCustom];
        [favoriteButton setFrame:favoriteImg.frame];
    
        [favoriteButton setBackgroundImage:favoriteImg.image forState:UIControlStateNormal];
        [favoriteButton setBackgroundImage:[UIImage imageNamed:@"favorites_active.png"] forState:UIControlStateHighlighted];     
        [favoriteButton addTarget:self action:@selector(favoriteButtonPressed) forControlEvents:UIControlEventTouchUpInside];
    
        [customTabbarView addSubview: favoriteButton];
        //[favoriteImg release];
    
        [self.view addSubview:customTabbarView ];
    
        [self newsFeedsButtonPressed];
    }
    
    
    - (void) newsFeedsButtonPressed
    {
        NSLog(@"TabBarSingleton: newsFeedsButtonPressed");
        self.selectedIndex = 0;
    
        //Keeping Highlighted newsFeed tab
        UIImageView *newsFeedImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"newsfeeds_active.png"]];
        [Button setImage: newsFeedImg.image forState:UIControlStateNormal];
    
        //Keeping normal others tab icons 
        UIImageView *favoriteImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"favorites_normal.png"]];
        [favoriteButton setImage: favoriteImg.image forState:UIControlStateNormal];
    }
    
    - (void) favoriteButtonPressed
    {
        NSLog(@"TabBarSingleton: favoriteButtonPressed");
        self.selectedIndex = 1;
    
        //Keeping Highlighted newsFeed tab
        UIImageView *newsFeedImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"newsfeeds_normal.png"]];
        [Button setImage: newsFeedImg.image forState:UIControlStateNormal];
    
        //Keeping normal others tab icons 
        UIImageView *favoriteImg = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"favorites_active.png"]];
        [favoriteButton setImage: favoriteImg.image forState:UIControlStateNormal];
    
    #pragma mark  UITabBarControllerDelegate 
    
    - (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
    {
        NSLog(@"TabBarSingleton: shouldSelectViewController");
        return YES;
    }
    
    - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
    {
        NSLog(@"TabBarSingleton: didSelectViewController");
    }
    
    - (void) dealloc
    {
        //[barLock release];
        [super dealloc];
    }
    
    @end