gpt4 book ai didi

iphone - viewcontroller 中 UIView Action 的子类

转载 作者:行者123 更新时间:2023-12-03 21:18:15 25 4
gpt4 key购买 nike

如何向 UIView 子类中创建的按钮添加操作?

这是我的代码。这是我第一次在 UIView 子类中纯粹以编程方式编写 View 。我创建了“方向”按钮,如下所示:

directionsButton = [self buttonWithTitle:@"Directions" target:self selector:@selector(getDirections:) frame:directionsFrame image:buttonImage insertImage:directionsIcon];

现在如何在 View Controller 中添加“getDirections”选择器?将以下 UIView 子类添加为 BookViewController 的 subview

#import "BookView.h"

#define GRAY_BOTTOM 44
#define PADDING 5
#define THUMB_WIDTH 50
#define THUMB_HEIGHT 43
#define DIRECTIONS_BUTTON_WIDTH 94
#define BUTTON_HEIGHT 34
#define BUTTON_VERTICAL_INSET 2

static NSArray* grayBottomButtons = nil;

@interface BookView (PrivateMethods)

- (void)setupSubviewsWithContentFrame:(CGRect)frameRect;
- (UIButton *)buttonWithTitle:(NSString *)title target:(id)target selector:(SEL)inSelector frame:(CGRect)frame image:(UIImage*)image insertImage:(UIImage*)insertImage;

@end

@implementation BookView

// @synthesize delegate;

- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {

[self setupSubviewsWithContentFrame:frame];

self.backgroundColor = [UIColor clearColor]; // Make sure clear Background
self.opaque = NO;

}
return self;
}

- (void)setupSubviewsWithContentFrame:(CGRect)frameRect {

// Setup views

// Create frame for white background
CGRect frame = CGRectMake(0, 0, self.frame.size.width, self.frame.size.height);
WhiteRoundedView *whiteBg = [[WhiteRoundedView alloc] initWithFrame:frame];

// Create frame for gray bottom view
CGRect gFrame = CGRectMake(0, (self.frame.size.height - GRAY_BOTTOM), self.frame.size.width, GRAY_BOTTOM);
GrayBottomView *grayBg = [[GrayBottomView alloc] initWithFrame:gFrame];

// Create salon thumbnail view
UIImageView *salonThumb = [[UIImageView alloc] initWithFrame:CGRectMake(PADDING, PADDING, THUMB_WIDTH, THUMB_HEIGHT)];
// Set salonThumb image
salonThumb.image = [UIImage imageNamed:@"SalonThumb.png"];

// Set salonName UILabel
UILabel *salonName = [[UILabel alloc] initWithFrame:CGRectMake((PADDING*2 + THUMB_WIDTH), PADDING, 200, 15)];
// Set text
salonName.text = @"Salon Aria";
// Set font
salonName.font = [UIFont fontWithName:@"PTSans-Bold" size:15.0];
// Set Alignment
salonName.textAlignment = UITextAlignmentLeft;
// Set font color
salonName.textColor = [UIColor colorWithRed:0.0f/255.0 green:0.0f/255.0 blue:0.0f/255.0 alpha:1.0];


// Set salonAddressLineOne UILabel (Line One)
UILabel *salonAddressLineOne = [[UILabel alloc] initWithFrame:CGRectMake((PADDING*2 + THUMB_WIDTH), (PADDING + 15), 140, 13)];
// Set text
salonAddressLineOne.text = @"6325 Main St, Suite 140";
// Set font
salonAddressLineOne.font = [UIFont fontWithName:@"PTSans-Regular" size:13.0];
// Set Alignment
salonAddressLineOne.textAlignment = UITextAlignmentLeft;
// Set font color
salonAddressLineOne.textColor = [UIColor colorWithRed:40.0f/255.0 green:40.0f/255.0 blue:40.0f/255.0 alpha:1.0];

// Set salonAddressLineTwo UILabel (Line Two)
UILabel *salonAddressLineTwo = [[UILabel alloc] initWithFrame:CGRectMake((PADDING*2 + THUMB_WIDTH), (PADDING + 28), 140, 13)];
// Set text
salonAddressLineTwo.text = @"Woodridge, IL 60517";
// Set font
salonAddressLineTwo.font = [UIFont fontWithName:@"PTSans-Regular" size:13.0];
// Set font color
salonAddressLineTwo.textColor = [UIColor colorWithRed:40.0f/255.0 green:40.0f/255.0 blue:40.0f/255.0 alpha:1.0];
// Set Alignment
salonAddressLineTwo.textAlignment = UITextAlignmentLeft;

// Set the background image with stretchable type for all buttons on this view
UIImage *buttonImage = [[UIImage imageNamed:@"UIButton.png"] stretchableImageWithLeftCapWidth:2 topCapHeight:2];

// Set the insert image (directions icon)
UIImage *directionsIcon = [[UIImage imageNamed:@"DirectionsIcon.png"] stretchableImageWithLeftCapWidth:2 topCapHeight:2];
// Set the directions button frame
CGRect directionsFrame = CGRectMake(self.frame.size.width - PADDING - DIRECTIONS_BUTTON_WIDTH, PADDING, DIRECTIONS_BUTTON_WIDTH, BUTTON_HEIGHT);
// Add the button
directionsButton = [self buttonWithTitle:@"Directions" target:self selector:@selector(getDirections:) frame:directionsFrame image:buttonImage insertImage:directionsIcon];

// Create the salonMap with frame
salonMap = [[MKMapView alloc] initWithFrame:
CGRectMake(PADDING, (PADDING*2 + THUMB_HEIGHT), (self.frame.size.width - PADDING*2), (self.frame.size.height - THUMB_HEIGHT - PADDING*3 - GRAY_BOTTOM))];

// Add view in proper order and location

[self addSubview:whiteBg];

[whiteBg addSubview:grayBg];

[whiteBg addSubview:salonThumb];

[whiteBg addSubview:salonName];

[whiteBg addSubview:salonAddressLineOne];

[whiteBg addSubview:salonAddressLineTwo];

[whiteBg addSubview:directionsButton];

[whiteBg addSubview:salonMap];

[self setNeedsDisplay];

}

- (UIButton *)buttonWithTitle:(NSString *)title target:(id)target selector:(SEL)inSelector frame:(CGRect)frame image:(UIImage*)image insertImage:(UIImage*)insertImage
{
// Create button
UIButton *button = [[UIButton alloc] initWithFrame:frame];

// Set button content alignment
button.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

// Set button title
[button setTitle:title forState:UIControlStateNormal & UIControlStateHighlighted & UIControlStateSelected];
// Set button title color
[button setTitleColor:[UIColor colorWithRed:91.0f/255.0 green:82.0f/255.0 blue:82.0f/255.0 alpha:1.0] forState:UIControlStateNormal & UIControlStateHighlighted & UIControlStateSelected];
// Add the background image
[button setBackgroundImage:image forState:UIControlStateNormal];
// Add Events
[button addTarget:target action:inSelector forControlEvents:UIControlEventTouchUpInside];
// in case the parent view draws with a custom color or gradient, use a transparent color
[button setBackgroundColor:[UIColor clearColor]];
// Set titleShadowColor this way (apparently, titleLabel.shadowcolor does not work)
[button setTitleShadowColor:[UIColor colorWithRed:255.0f/255.0 green:255.0f/255.0 blue:255.0f/255.0 alpha:.75] forState:UIControlStateNormal & UIControlStateHighlighted & UIControlStateSelected];

// Set button titleLabel properties
button.titleLabel.font = [UIFont fontWithName:@"PTSans-Bold" size:13.0];
button.titleLabel.shadowOffset = CGSizeMake(1, 1);

// If there is an insertImage icon
if(insertImage != nil)
{
// padding between image and text
int seperate = 6;
// Image and title frame (used to center text/image)
int width = (button.titleLabel.frame.size.width + insertImage.size.width + seperate);
int buttonWidth = button.frame.size.width;
int xPadding = (buttonWidth - width)/2;
int yPadding = (button.frame.size.height - insertImage.size.height)/2;

// Create an image view for the image (standard icon is 12x13)
UIImageView *insertImageView = [[UIImageView alloc] initWithFrame:CGRectMake(xPadding, yPadding, insertImage.size.width, insertImage.size.height)];
// add the insertImage to the view
[insertImageView setImage:insertImage];
// add the insertImageView to the button
[button addSubview:insertImageView];
// Add offset with title
button.titleEdgeInsets = UIEdgeInsetsMake(BUTTON_VERTICAL_INSET, insertImage.size.width + seperate, 0, 0);
}
else
{
// No image so no horizontal offset but PTSans font needs a 2 vertical offset
button.titleEdgeInsets = UIEdgeInsetsMake(BUTTON_VERTICAL_INSET, 0, 0, 0);
}
return button;
}


@end

最佳答案

从 View Controller 中,为 View 中的每个按钮执行如下操作:

[button addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside];

或者,您可以通过按住 Ctrl 键并从按钮拖动到文件所有者( View Controller )的头文件来在 Interface Builder 中设置连接。这将要求您定义一个方法名称,并将其全部链接起来。

关于iphone - viewcontroller 中 UIView Action 的子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8266167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com