天道酬勤,学无止境

触摸后保持UIButton处于选中状态(Keeping a UIButton selected after a touch)

问题

用户单击按钮后,我希望在执行网络操作期间该按钮保持按下状态。 网络操作完成后,我希望按钮返回到其默认状态。

我试过在按钮按下后立即调用- [UIButton setSelected:YES] (并在我的网络操作完成后相应调用- [UIButton setSelected:NO] ),但它似乎无能为力。 如果我调用setHighlighted:同样的事情。

我想我可以尝试换掉背景图像以表示在网络运行期间处于选定状态,但这似乎是一种hack。 还有更好的建议吗?

这是我的代码如下所示:

- (IBAction)checkInButtonPushed
{
    self.checkInButton.enabled = NO;
    self.checkInButton.selected = YES;
    self.checkInButton.highlighted = YES;
    [self.checkInActivityIndicatorView startAnimating];
    [CheckInOperation startWithPlace:self.place delegate:self];
}

- (void)checkInCompletedWithNewFeedItem:(FeedItem*)newFeedItem wasNewPlace:(BOOL)newPlace possibleError:(NSError*)error;
{
    [self.checkInActivityIndicatorView stopAnimating];
    self.checkInButton.enabled = YES;
    self.checkInButton.selected = NO;
    self.checkInButton.highlighted = NO;
}
回答1

如何在按钮上为不同的UIControlStates设置图像? 您是否正在为UIControlStateHighlighted以及UIControlStateSelected设置背景图像?

UIImage *someImage = [UIImage imageNamed:@"SomeResource.png"];
[button setBackgroundImage:someImage forState:UIControlStateHighlighted];
[button setBackgroundImage:someImage forState:UIControlStateSelected];

如果您要在按钮按下事件上设置选定状态,而不是在按钮内部进行上调,则按钮实际上将处于突出显示+选定状态,因此您也需要进行设置。

[button setBackgroundImage:someImage forState:(UIControlStateHighlighted|UIControlStateSelected)];

编辑:

总结我在评论中的评论并解决您发布的代码...您需要为您所处于的完整UIControl状态设置背景图像。根据您的代码段,此控件状态将被禁用+选择+在网络运行期间突出显示。 这意味着您需要执行以下操作:

[button setBackgroundImage:someImage forState:(UIControlStateDisabled|UIControlStateHighlighted|UIControlStateSelected)];

如果删除highlighted = YES ,那么您将需要:

[button setBackgroundImage:someImage forState:(UIControlStateDisabled|UIControlStateSelected)];

拿图片吗

回答2

我有一个更简单的方法。 只需使用延迟为0的“ performSelector”来执行[button setHighlighted:YES] 。 当前运行循环结束后,这将重新突出显示。

- (IBAction)buttonSelected:(UIButton*)sender {
    NSLog(@"selected %@",sender.titleLabel.text);
    [self performSelector:@selector(doHighlight:) withObject:sender afterDelay:0];
}

- (void)doHighlight:(UIButton*)b {
    [b setHighlighted:YES];
}
回答3

“打开电源,一切都会变得更好”

    button.selected = !button.selected;

工作完美...将插座连接到Interface Builder中的按钮后。

您不需要setBackgroundImage:forState:,构建器允许您指定背景图像(必要时调整大小)或/和前景图像(不调整大小)。

回答4

尝试使用NSOperationQueue来实现此目的。 尝试如下代码:

[[NSOperationQueue mainQueue] addOperationWithBlock:^{
    theButton.highlighted = YES;
}];

希望这可以帮助。

回答5

使用一个块,这样就不必构建整个单独的方法:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0), dispatch_get_main_queue(), ^{
    theButton.highlighted = YES;
});

更新

为了清楚起见,您仍然需要设置组合状态的背景(或正常图像),以及在接受的答案中使用常规符号(如粗线)。 在某个时候,您的按钮将被选中并突出显示,除非您执行以下操作,否则您将没有图像:

[button setBackgroundImage:someImage forState (UIControlStateHighlighted|UIControlStateSelected)];

否则,您的按钮可以退回到UIControlStateNormal图像,以显示简短的选定状态和突出显示状态,并且您会看到一个闪烁。

回答6

我正在像下面这样迅速地做到这一点。

我创建UIButton的子类并实现了自定义属性state

class ActiveButton: UIButton {

    private var _active = false
    var active:Bool {
        set{
            _active = newValue
            updateState()
        }
        get{
            return _active
        }
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.addTarget(self, action: #selector(ActiveButton.touchUpInside(_:)), forControlEvents: .TouchUpInside)
    }

    func touchUpInside(sender:UIButton) {
        active = !active
    }

    private func updateState() {
        NSOperationQueue.mainQueue().addOperationWithBlock {
            self.highlighted = self.active
        }
    }

}

非常适合我。

回答7

我遇到了类似的问题,我想要一个按钮以使其在单击后保持突出显示。 问题是,如果您尝试在单击操作中使用setHighlighted:YES ,它将在单击操作后立即重置- (IBAction)checkInButtonPushed

我通过使用这样的NSTimer解决了这个问题

NSTimer *timer;
timer = [NSTimer scheduledTimerWithTimeInterval: 0.01
                                         target: self
                                       selector: @selector(selectCurrentIndex)
                                       userInfo: nil
                                        repeats: NO];

然后从我的selectCurrentIndex方法中调用setHighlighted:YES 。 我使用常规的UIButtonTypeRoundedRect按钮。

回答8

我有另一种方式...如果您不想使用图像,并且想要按下按钮的效果,则可以将Button子类化,这是我的代码:

在.h文件中:

@interface reservasButton : UIButton {

BOOL isPressed;
}
 @end

在.m文件中:

#import <QuartzCore/QuartzCore.h>


 @implementation reservasButton

 -(void)setupView {  //This is for Shadow

    self.layer.shadowColor = [UIColor blackColor].CGColor;
    self.layer.shadowOpacity = 0.5; 
    self.layer.shadowRadius = 1;    
    self.layer.shadowOffset = CGSizeMake(2.0f, 2.0f); //comment
    //   self.layer.borderWidth = 1;
    self.contentVerticalAlignment   = UIControlContentVerticalAlignmentCenter;
    self.contentHorizontalAlignment = UIControlContentHorizontalAlignmentCenter;

    // [self setBackgroundColor:[UIColor whiteColor]];

    //  self.opaque = YES;


}

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

    return self;
}

-(id)initWithCoder:(NSCoder *)aDecoder{
    if((self = [super initWithCoder:aDecoder])){
        [self setupView];
    }

    return self;
}

//Here is the important code

 -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{


  if (isPressed == FALSE) {

      self.contentEdgeInsets = UIEdgeInsetsMake(1.0,1.0,-1.0,-1.0);
      self.layer.shadowOffset = CGSizeMake(1.0f, 1.0f);
      self.layer.shadowOpacity = 0.8;

      [super touchesBegan:touches withEvent:event];

      isPressed = TRUE;

     }
     else {

         self.contentEdgeInsets = UIEdgeInsetsMake(0.0,0.0,0.0,0.0);
         self.layer.shadowOffset = CGSizeMake(2.0f, 2.0f);
         self.layer.shadowOpacity = 0.5;

         [super touchesEnded:touches withEvent:event];

         isPressed = FALSE;

     }


 } `
回答9

这是使用上述方法的C#/ MonoTouch(Xamarin.iOS)实现。 假定您已经设置了高亮图像状态,并配置选定和选定状态以使用同一图像。

var selected = button.BackgroundImageForState(UIControlState.Highlighted);
button.SetBackgroundImage(selected, UIControlState.Selected);
button.SetBackgroundImage(selected, UIControlState.Selected | UIControlState.Highlighted);
button.TouchUpInside += delegate
{
    NSTimer.CreateScheduledTimer(TimeSpan.FromMilliseconds(0), delegate
    {
        button.Highlighted = true;
        NSTimer.CreateScheduledTimer(TimeSpan.FromMilliseconds(200), delegate
        {
            button.Highlighted = false;
        });
    });
};

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • UIButton事件。 有什么不同?(UIButton events. What's the difference?)
    问题 我遇到了一个问题,当我的按钮显示弹出菜单时,该按钮应保持“按下”状态。 弹出框是某些过滤器的选择器,过滤器显示在按钮本身上。 当我点击它并显示弹出窗口时,无论如何它都会被取消选择。 我认为我必须重新定义它在触摸事件上的行为,并使其响应touch up inside标准touch up inside 。 然后我想知道其他事件还负责什么? 但是我在iOS库中找不到事件列表,在StackOverflow中仅仅是关于touch up inside或touch down错误行为的问题。 那么触摸事件之间有什么区别? 触摸取消-当您触摸按钮但将手指移开而仍未选择时? 着陆-轻按即可。 着陆重复?? 触摸拖动输入?? 触摸拖动出口?? 触摸内部拖动?? 触摸拖动到外面在内部进行修饰-当您点击并释放在其边界内的按钮时。 它将UIButtons状态更改为“正常”。 在外面修饰-当您点击并释放按钮时,是否会触碰到边界? 其他IBAction不是由UIButton发送的,对不对? 这些事件又如何改变UIButton的外观? 喜欢highlighted还是selected ? 我会很高兴找到关于IBAction的好文章的链接,因为我找不到它。 回答1 从Apple的UIControlEvents文档中: UIControlEventTouchCancel 系统事件取消控件的当前触摸。
  • Keeping a UIButton selected after a touch
    After my user clicks a button, I'd like that button to stay pushed during the time that I perform a network operation. When the network operation is complete, I want the button to return to its default state. I've tried calling -[UIButton setSelected:YES] right after the button push (with a corresponding call to -[UIButton setSelected:NO] after my network op finishes) but it doesn't seem to do anything. Same thing if I call setHighlighted:. I suppose I could try swapping out the background image to denote a selected state for the duration of the network op, but that seems like a hack. Any
  • UIButton:使点击区域大于默认点击区域(UIButton: Making the hit area larger than the default hit area)
    问题 我有一个关于UIButton及其命中区域的问题。 我在界面构建器中使用“信息暗”按钮,但是发现命中区域不足以容纳某些人的手指。 有没有一种方法可以通过编程方式或在Interface Builder中增加按钮的点击区域,而无需更改InfoButton图形的大小? 回答1 由于我使用的是背景图片,因此这些解决方案都无法很好地满足我的需求。 这是一个执行一些有趣的Objective-C魔术的解决方案,并以最少的代码提供了一个解决方案。 首先,向UIButton添加一个类别,该类别将覆盖点击测试,还添加一个用于扩展点击测试框架的属性。 UIButton + Extensions.h @interface UIButton (Extensions) @property(nonatomic, assign) UIEdgeInsets hitTestEdgeInsets; @end UIButton + Extensions.m #import "UIButton+Extensions.h" #import <objc/runtime.h> @implementation UIButton (Extensions) @dynamic hitTestEdgeInsets; static const NSString *KEY_HIT_TEST_EDGE_INSETS = @
  • 如何禁用多点触控?(How to disable multitouch?)
    问题 我的应用程序有几个触发不同事件的按钮。 用户应该不能按住几个按钮。 无论如何,按住几个按钮会使应用程序崩溃。 因此,我试图在我的应用程序中禁用多点触控。 我在所有xib文件中都未选中“多点触摸”,据我所知,属性“ multipleTouchEnabled”和“ exclusiveTouch”控制视图是否使用多点触摸。 因此,在我的applicationDidFinishLaunching中,我输入了以下内容: self.mainViewController.view.multipleTouchEnabled = NO; self.mainViewController.view.exclusiveTouch = YES; 在每个视图控制器中,我都将其放入viewDidLoad self.view.multipleTouchEnabled = NO; self.view.exclusiveTouch = YES; 但是,它仍然接受多次触摸。 在发生触地事件后,我可以执行类似禁用其他按钮的操作,但这将是一个丑陋的破解。 当然有办法正确禁用多点触摸吗? 回答1 如果一次只希望一个按钮响应触摸,则需要为该按钮而不是父视图设置ExclusiveTouch。 另外,当一个按钮获得“ Touch Down”事件时,您可以禁用其他按钮。 这是后者的示例,在我的测试中效果更好。
  • 如何禁用UITableView选择?(How can I disable the UITableView selection?)
    问题 当您点击UITableView中的一行时,该行将突出显示并选中。 是否可以禁用此功能,所以点击一行不会执行任何操作? 回答1 对我来说,以下工作正常: tableView.allowsSelection = false 这意味着didSelectRowAt#根本无法工作。 就是说,如此触摸桌子的一排,绝对没有任何作用。 (因此,显然,绝不会有选定的动画。) (请注意,如果在单元格上有UIButton或任何其他控件,那么这些控件当然仍然可以使用。您碰巧在表格单元格上拥有的任何控件都与UITableView允许您“选择行”的功能完全无关。 “使用didSelectRowAt# 。) 要注意的另一点是:当UITableView处于编辑模式时,此功能不起作用。 要在编辑模式下限制单元格的选择,请使用以下代码: tableView.allowsSelectionDuringEditing = false 回答2 您要做的就是使用以下任一方法在UITableViewCell实例上设置选择样式: 目标C: cell.selectionStyle = UITableViewCellSelectionStyleNone; 或者 [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 斯威夫特2: cell
  • 检测在UITableView中按下了哪个UIButton(Detecting which UIButton was pressed in a UITableView)
    问题 我有一个UITableView 5个UITableViewCells 。 每个单元包含一个UIButton ,其设置如下: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *identifier = @"identifier"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (cell == nil) { cell = [[UITableView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier]; [cell autorelelase]; UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 5, 40, 20)]; [button addTarget:self action:@selector(buttonPressedAction:) forControlEvents
  • 在SKScene中设置按钮(Setting up buttons in SKScene)
    问题 我发现UIButtons在SKScene不能很好地工作,所以我试图将SKNode子类SKNode以在SpriteKit创建一个按钮。 我希望它的工作方式是,如果我在SKScene初始化一个按钮并启用触摸事件,那么当按下该按钮时,它将在我的SKScene调用一个方法。 我将不胜感激任何能使我找到解决此问题的方法的建议。 谢谢。 回答1 您可以将SKSpriteNode用作按钮,然后在用户触摸时,检查该节点是否被触摸。 使用SKSpriteNode的name属性来标识节点: //fire button - (SKSpriteNode *)fireButtonNode { SKSpriteNode *fireNode = [SKSpriteNode spriteNodeWithImageNamed:@"fireButton.png"]; fireNode.position = CGPointMake(fireButtonX,fireButtonY); fireNode.name = @"fireButtonNode";//how the node is identified later fireNode.zPosition = 1.0; return fireNode; } 将节点添加到场景: [self addChild: [self fireButtonNode]]; 处理触感
  • 集合视图中单元格中的UIButton未收到事件内部的补全(UIButton in cell in collection view not receiving touch up inside event)
    问题 以下代码表达了我的问题:(它是自包含的,因为您可以使用空模板创建一个Xcode项目,替换main.m文件的内容,删除AppDelegate.h / .m文件并进行构建) // // main.m // CollectionViewProblem // #import <UIKit/UIKit.h> @interface Cell : UICollectionViewCell @property (nonatomic, strong) UIButton *button; @property (nonatomic, strong) UILabel *label; @end @implementation Cell - (id)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { self.label = [[UILabel alloc] initWithFrame:self.bounds]; self.label.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; self.label.backgroundColor = [UIColor greenColor]
  • 突出显示时如何更改UIButton的背景颜色?(How to change the background color of a UIButton while it's highlighted?)
    问题 在我的应用程序中的某个点上,我有一个突出显示的UIButton (例如,当用户将手指放在按钮上时),并且我需要在突出显示按钮时更改背景色(因此,当用户的手指仍在按钮上时) )。 我尝试了以下方法: _button.backgroundColor = [UIColor redColor]; 但这是行不通的。 颜色保持不变。 当按钮未突出显示且工作正常时,我尝试了同一段代码。 我还尝试在更改颜色后调用-setNeedsDisplay ,但没有任何效果。 如何强制按钮更改背景颜色? 回答1 您可以重写UIButton的setHighlighted方法。 物镜 - (void)setHighlighted:(BOOL)highlighted { [super setHighlighted:highlighted]; if (highlighted) { self.backgroundColor = UIColorFromRGB(0x387038); } else { self.backgroundColor = UIColorFromRGB(0x5bb75b); } } Swift 3.0和Swift 4.1 override open var isHighlighted: Bool { didSet { backgroundColor = isHighlighted
  • 在UITextField之外的任何地方消除触摸键盘(Dismiss keyboard on touch anywhere outside UITextField)
    问题 我正在开发具有大量的iPad应用程序UIViewControllers , UITableViews (与细胞accessoryViews的UITextFields )等等,等等很多的UIViewControllers出现在导航层次结构中。 在有些情况下许多不同的地方UITextFields出现,包括作为UITableViewCell accessoryViews 。 我想设计一种有效的策略,只要用户在当前正在编辑的UITextField之外触摸,就可以关闭键盘。 我已经搜索了键盘关闭技术,但还没有找到答案来解释通用的键盘关闭策略如何工作。 例如,我喜欢这种方法,将以下代码添加到任何ViewController中: - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { NSLog(@"* * * * * * * * *ViewControllerBase touchesBegan"); [self.view endEditing:YES]; // dismiss the keyboard [super touchesBegan:touches withEvent:event]; } ...但是这种技术无法处理例如在显示的UITableView中发生触摸的情况。 因此
  • 如何使Superview拦截按钮触摸事件?(How to make a superview intercept button touch events?)
    问题 说我有这段代码: #import <UIKit/UIKit.h> @interface MyView : UIView @end @implementation MyView - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { // How can I get this to show up even when the button is touched? NSLog(@"%@", [touches anyObject]); } @end @interface TestViewAppDelegate : NSObject <UIApplicationDelegate> { UIWindow *window; } @end @implementation TestViewAppDelegate - (void)applicationDidFinishLaunching:(UIApplication *)application { window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; MyView *view = [[MyView alloc] initWithFrame:[window frame]];
  • 模态视图控制器-如何显示和关闭(modal View controllers - how to display and dismiss)
    问题 在过去的一周中,我为解决如何显示和关闭多个视图控制器来解决此问题而烦恼不已。 我已经创建了一个示例项目,并直接从该项目中粘贴代码。 我有3个视图控制器及其相应的.xib文件。 MainViewController,VC1和VC2。 我在主视图控制器上有两个按钮。 - (IBAction)VC1Pressed:(UIButton *)sender { VC1 *vc1 = [[VC1 alloc] initWithNibName:@"VC1" bundle:nil]; [vc1 setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; [self presentViewController:vc1 animated:YES completion:nil]; } 这将打开VC1,没有任何问题。 在VC1中,我有另一个按钮应该打开VC2,同时关闭VC1。 - (IBAction)buttonPressedFromVC1:(UIButton *)sender { VC2 *vc2 = [[VC2 alloc] initWithNibName:@"VC2" bundle:nil]; [vc2 setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];
  • 使用UIView animateWithDuration动画时无法触摸UIButton(UIButton can't be touched while animated with UIView animateWithDuration)
    问题 我有以下代码: [UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationCurveEaseOut | UIViewAnimationOptionAllowUserInteraction animations:^{ CGRect r = [btn frame]; r.origin.y -= 40; [btn setFrame: r]; } completion:^(BOOL done){ if(done){ [UIView animateWithDuration:0.3 delay:1 options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction animations:^{ CGRect r = [btn frame]; r.origin.y += 40; [btn setFrame: r]; } completion:^(BOOL done){if(done) zombiePopping = 0; }]; } }]; 问题是,即使我使用的是UIViewAnimationOptionAllowInteraction ,按钮在动画时似乎也不会响应触摸
  • 如何将多行文本添加到UIButton?(How do you add multi-line text to a UIButton?)
    问题 我有以下代码... UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds]; buttonLabel.text = @"Long text string"; [targetButton addSubview:buttonLabel]; [targetButton bringSubviewToFront:buttonLabel]; ...这个想法是我可以为按钮添加多行文本,但是该文本始终被UIButton的backgroundImage遮盖。 显示该按钮的子视图的日志记录调用表明已添加UILabel,但看不到文本本身。 这是UIButton中的错误还是我做错了什么? 回答1 对于iOS 6及更高版本,请使用以下命令允许多行: button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; // you probably want to center it button.titleLabel.textAlignment = NSTextAlignmentCenter; // if you want to [button setTitle: @"Line1\nLine2" forState: UIControlStateNormal
  • 允许与另一个UIView下的UIView进行交互(Allowing interaction with a UIView under another UIView)
    问题 有没有一种简单的方法可以允许与另一个UIView下的UIView中的按钮进行交互-在该UIView的顶部没有实际对象,因此该按钮顶部没有UIObject? 例如,此刻我有一个UIView(A),在屏幕的顶部是一个对象,在屏幕的底部是一个对象,中间没有任何对象。 它位于另一个UIView的顶部,该UIView的中间有按钮(B)。 但是,我似乎无法与B中间的按钮进行交互。 我可以看到B中的按钮-我已经将A的背景设置为clearColor-但是B中的按钮似乎没有收到触摸,尽管事实上在这些按钮之上实际上没有来自A的对象。 编辑-我仍然希望能够与顶部UIView中的对象进行交互 当然有一个简单的方法可以做到这一点吗? 回答1 您应该为顶视图创建一个UIView子类,并重写以下方法: - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event { // UIView will be "transparent" for touch events if we return NO return (point.y < MIDDLE_Y1 || point.y > MIDDLE_Y2); } 您还可以查看hitTest:event:方法。 回答2 尽管这里的许多答案都行得通,但我惊讶的是,这里没有给出最方便,最通用,最简单的答案。
  • 在UIScrollView中时,UIButton不起作用(UIButton does not work when it in UIScrollView)
    问题 我的观点结构: UITableView UITableViewCell UIScrollView CustomView UIButton 问题是当我触摸它时,UIButton不起作用。 我用代码创建它: btn = [[UIButton alloc] init]; [btn setImage:image forState:UIControlStateNormal]; [btn addTarget:self action:@selector(tileTouchUpInside) forControlEvents:UIControlEventTouchUpInside]; btn.layer.zPosition = 1; [self addSubview:btn]; 我还添加了这个: scroll.delaysContentTouches = NO; scroll.canCancelContentTouches = NO; 但是我的按钮仍然无法正常工作。 我无法取消ContentTouches或设置UITableView的延迟,因为如果设置它,则UITableView会停止垂直滚动。 谢谢你的帮助! 回答1 使用创建一个UIScrollview的子类 - (BOOL)touchesShouldCancelInContentView:(UIView *)view { return
  • 如何以编程方式创建基本的UIButton?(How do I create a basic UIButton programmatically?)
    问题 如何以编程方式创建基本的UIButton ? 例如,在我的视图控制器中,当执行viewDidLoad方法时,将动态创建三个UIButton并设置其布局或属性。 回答1 这是一个: UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; [button addTarget:self action:@selector(aMethod:) forControlEvents:UIControlEventTouchUpInside]; [button setTitle:@"Show View" forState:UIControlStateNormal]; button.frame = CGRectMake(80.0, 210.0, 160.0, 40.0); [view addSubview:button]; 回答2 - (void)viewDidLoad { [super viewDidLoad]; [self addMyButton]; // Call add button method on view load } - (void)addMyButton{ // Method for creating button, with background image and other properties
  • iOS+PHP实现登录功能
      近期在做app开发的时候,因为要用到app登录功能,就自己写了个简单的iOS+PHP实现登录功能的demo,经过运行能够通过登录测试。   在开发过程中,也是碰到了各种各样的问题,经过不断的调试和改变方法,终于将所有的坑都基本上填满了,因此,将最终完整版的代码及相关流程记录在此,供自己及其它需要的人查阅使用。 一、一些约定条件   Mac OS真的是一个太太太封闭的系统环境了,封闭到我已经测试了N中办法,都没办法成功搭建后台服务器——不管是使用集成软件(如MAMP或者XAMPP),还是自行下载MySQL和MyAdmin客户端安装。有的时候Apache无法正常启动,有时候MySQL又故障掉了,更悲哀的是,真机测试时,客户端上输入内容后,无法正常与服务器通信!逼不得已,就只能放弃了,最终采用Windows的WIN7系统的电脑做后台服务器,然后与测试用的手机、编程用的Mac电脑处于同一无线局域网下。==如果哪位同仁能告知如何在MacBook上搭建后台服务器且能正常工作,欢迎不吝赐教,鄙人万分感激!==   当在装有WIN 7系统的电脑上配置服务器时,我使用的是WAMP集成软件,数据库和表的编辑操作使用的是SQLyog软件,这样可以有效的创建、修改表的内容。==注意,在WIN7的电脑上搭建完后台并创建好数据库之后,还需要进行局域网的配置工作,这样才能让处于同一局域网下的设备(如手机
  • 检测表视图中按下的uibutton:Swift最佳做法(detecting uibutton pressed in tableview: Swift Best Practices)
    问题 我有一个表格视图,其中包含可变数量的单元格,这些单元格代表与他们的特定老师相对应的学生。 它们是带有按钮的自定义单元格,该按钮触发了对新VC的选择,从而显示了有关该单元格所在学生的详细信息。 我的问题是: 快速识别哪个按钮被按下的最佳实践是什么? 一旦知道索引路径,就可以确定需要将哪个学生的信息传递给下一个VC。 在下面的文章中,对于目标C会有很好的答案,但是我不确定如何转换为Swift。 任何帮助将非常感激。 检测在UITableView中按下了哪个UIButton 回答1 如果您的代码允许,我建议您将UIButton标记设置为等于indexPath.row ,以便在触发其操作时可以拉出标记,从而在触发方法期间从按钮数据中移出。 例如,在cellForRowAtIndexPath您可以设置标签: button.tag = indexPath.row button.addTarget(self, action: "buttonClicked:", forControlEvents: UIControlEvents.TouchUpInside) 然后在buttonClicked: ,您可以获取代码,从而获取行: func buttonClicked(sender:UIButton) { let buttonRow = sender.tag } 否则
  • 带按钮的自定义MKAnnotation标注气泡(Custom MKAnnotation callout bubble with button)
    问题 我正在开发应用程序,该应用程序通过gps对用户进行定位,然后询问他是否位于特定位置。 为了确认这一点,标注气泡立即出现在他面前,问他是否在特定的地方。 由于存在很多类似的问题,因此我能够进行自定义标注气泡: 我的问题:按钮不是“可点击的”我的猜测:由于此自定义标注高于标准的标注气泡,因此我不得不将其置于否定的“框架”中,因此无法单击按钮。 这是我的didSelectAnnotationView方法 - (void)mapView:(MKMapView *)mapView didSelectAnnotationView:(MKAnnotationView *)view { if(![view.annotation isKindOfClass:[MKUserLocation class]]) { CalloutView *calloutView = (CalloutView *)[[[NSBundle mainBundle] loadNibNamed:@"callOutView" owner:self options:nil] objectAtIndex:0]; CGRect calloutViewFrame = calloutView.frame; calloutViewFrame.origin = CGPointMake(-calloutViewFrame.size